You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1.1 lib/Settings/dossiq_register.json: add configuration["x-openregister-mcp"] to case, task, caseType, statusType, statusRecord — verbs, filters and agent-facing descriptions exactly as design.md §D1. Create the configuration object where absent; never drop an existing key. python3 -m json.tool after each edit.
1.2 lib/Settings/dossiq_register.json: same for decision, result (get only), resultType, document, caseDocument (search only).
1.3 lib/Settings/dossiq_register.json: same for bezwaar and complaint (get only — no search, AVG: klager is an embedded citizen record).
1.4 lib/Settings/register.d/60-termijnbewaking.json: same for termijnInstance.
1.5 Assert every declared search.filters entry is a real property of its schema and that no create/update/delete verb and no identifying filter (initiatorSourceId, initiatorDisplayName, initiatorType, requester) appears anywhere.
2.1 Delete lib/Mcp/DossiqToolProvider.php (and the now-empty lib/Mcp/ directory). Both its tools are derivable CRUD, so nothing moves to a service: add no#[McpTool] method and noIMcpScannableServices class — an empty scannable-services class would be a dead seam.
2.2 lib/AppInfo/Application.php: remove the 'mcpProvider' => DossiqToolProvider::class Bootstrap key and the use OCA\Dossiq\Mcp\DossiqToolProvider; import.
2.3 Delete tests/Unit/Mcp/DossiqToolProviderTest.php, tests/Stubs/Mcp/IMcpToolProvider.php, its require in tests/bootstrap.php, and the OCA\OpenRegister\Mcp\IMcpToolProviderreferencedClass suppression in psalm.xml.
3.1 Sync the delta into openspec/specs/mcp-integration/spec.md at archive time; ensure no @spec tag anywhere points at a change path (gate-46).
3.2 composer check:strict (PHPCS/PHPMD/Psalm/PHPStan) clean on the touched files; PHPUnit shows zero new failures against a self-measured baseline.
4.1 Re-run the register import repair step, then read the imported schemas back from OpenRegister and assert configuration["x-openregister-mcp"] survived — the case schema is also defined in register.d/dso-omgevingsloket.json, so prove the union merge did not drop the block (verify from OpenRegister, not from the file).
4.2 tools/list for dossiq: exactly 22 tools, all read-only; dossiq.listProcesses and dossiq.getProcessDetails are GONE (a surviving hand-written tool would shadow its derived twin permanently); dossiq.case.search and dossiq.statusRecord.search are present.
4.3 As a non-privileged user, invoke dossiq.case.search and confirm the result set equals what that user can already read in the UI — the provider's assignee/role ACL is gone and OpenRegister RBAC is now the only gate (REQ-MCP-105). If register RBAC is not configured, fix that before shipping.
4.4 Confirm dossiq.case.search rejects initiatorSourceId as an undeclared filter (no BSN lookup surface) and that dossiq.complaint.search does not exist.
Artifacts
Specs
Tasks
lib/Settings/dossiq_register.json: addconfiguration["x-openregister-mcp"]tocase,task,caseType,statusType,statusRecord— verbs, filters and agent-facing descriptions exactly as design.md §D1. Create theconfigurationobject where absent; never drop an existing key.python3 -m json.toolafter each edit.lib/Settings/dossiq_register.json: same fordecision,result(get only),resultType,document,caseDocument(search only).lib/Settings/dossiq_register.json: same forbezwaarandcomplaint(get only — nosearch, AVG:klageris an embedded citizen record).lib/Settings/register.d/60-termijnbewaking.json: same fortermijnInstance.search.filtersentry is a real property of its schema and that nocreate/update/deleteverb and no identifying filter (initiatorSourceId,initiatorDisplayName,initiatorType,requester) appears anywhere.lib/Mcp/DossiqToolProvider.php(and the now-emptylib/Mcp/directory). Both its tools are derivable CRUD, so nothing moves to a service: add no#[McpTool]method and noIMcpScannableServicesclass — an empty scannable-services class would be a dead seam.lib/AppInfo/Application.php: remove the'mcpProvider' => DossiqToolProvider::classBootstrap key and theuse OCA\Dossiq\Mcp\DossiqToolProvider;import.tests/Unit/Mcp/DossiqToolProviderTest.php,tests/Stubs/Mcp/IMcpToolProvider.php, itsrequireintests/bootstrap.php, and theOCA\OpenRegister\Mcp\IMcpToolProviderreferencedClasssuppression inpsalm.xml.openspec/specs/mcp-integration/spec.mdat archive time; ensure no@spectag anywhere points at a change path (gate-46).composer check:strict(PHPCS/PHPMD/Psalm/PHPStan) clean on the touched files; PHPUnit shows zero new failures against a self-measured baseline.dossiq.listProcesses/dossiq.getProcessDetailsremoved (BREAKING, MCP surface).configuration["x-openregister-mcp"]survived — thecaseschema is also defined inregister.d/dso-omgevingsloket.json, so prove the union merge did not drop the block (verify from OpenRegister, not from the file).tools/listfordossiq: exactly 22 tools, all read-only;dossiq.listProcessesanddossiq.getProcessDetailsare GONE (a surviving hand-written tool would shadow its derived twin permanently);dossiq.case.searchanddossiq.statusRecord.searchare present.dossiq.case.searchand confirm the result set equals what that user can already read in the UI — the provider's assignee/role ACL is gone and OpenRegister RBAC is now the only gate (REQ-MCP-105). If register RBAC is not configured, fix that before shipping.dossiq.case.searchrejectsinitiatorSourceIdas an undeclared filter (no BSN lookup surface) and thatdossiq.complaint.searchdoes not exist.Design
See design.md for technical design details.
Synced from
openspec/changes/dossiq-mcp-adoptionby OpenSpec workflowApp:
dossiq