Naar inhoud

Knossos-MCP

Het labyrint één keer in kaart, zodat niemand er nog doorheen hoeft te dwalen.

Knossos (Κνωσός) is het bronstijdpaleis in het hart van Minoïsch Kreta, een complex zo uitgestrekt dat de Griekse mythologie het onthield als het Labyrint, de doolhof die Daedalus bouwde voor de Minotaurus, die niemand kon doorkruisen zonder een draad om de weg terug te vinden. Ariadne gaf die draad aan Theseus.

Wat het doet

Knossos-MCP is een local-first MCP-server die een repository één keer scant en architectuurvragen beantwoordt uit een graph die op bewijs steunt, zodat een agent niet telkens de hele broncode hoeft te herlezen om te weten wat van wat afhangt. Elk feit verwijst terug naar een bestand en een regel; wat statische analyse niet kan bewijzen, krijgt een confidence-label in plaats van een gok.

Scannen installeert nooit dependencies, importeert nooit een module en start nooit een framework op: workers draaien gesuperviseerd, met een resource-limiet, en hun uitvoer telt pas mee nadat die een schema- en limietcontrole doorstaat. Drieëndertig MCP-tools dekken oriëntatie, projecten en historie, het opzoeken van componenten, structuur- en impactanalyse en onderhoud; alleen server_info heeft geen CLI-equivalent. De vier schrijftools tonen standaard een preview en passen pas iets toe zodra je expliciet execute meegeeft.

Snel starten

Knossos-MCP staat nog niet op Packagist of in een container-registry, dus bouw de image zelf vanaf de broncode. De aanbevolen distributie is Docker: die pint PHP, Node, Python, Composer, SQLite, de PHP-parser en de TypeScript-compiler vast, zodat het gescande project daar zelf niets van nodig hoeft te hebben.

bash
docker build -t knossos-mcp:dev .
docker run --rm knossos-mcp:dev doctor --json

Voorbeelden

Twee aanroepen, echt uitgevoerd op de eigen broncode van Knossos-MCP, ingekort met '…'.

Een scan van de repository:

bash
$ knossos scan . --json
{"summary":"Scanned 394 files into 5446 nodes and 31972 relationships.",
 "data":{"files":394,"nodes":5446,"edges":31972,"diagnostics":0,"mode":"full",
   "scanner_metadata":{"knossos.php":{"files_scanned":372},
     "knossos.typescript":{"files_scanned":17,"programs":1},
     "knossos.python":{"files_scanned":5,"parser":"python.ast"}},
   "metrics":{"elapsed_ms":7443.85, …}}}

Jezelf oriënteren in de resulterende graph:

bash
$ knossos architecture-summary project_1b4f41… --json
{"summary":"Knossos-MCP contains 5446 nodes and 31972 relationships.",
 "data":{"node_kinds":[{"kind":"method","count":3814},{"kind":"class","count":415},
   {"kind":"external_method","count":378},{"kind":"external_function","count":297},
   {"kind":"property","count":205}, …],
   "languages":[{"kind":"php","count":372},{"kind":"javascript","count":17},{"kind":"python","count":5}]}}

Mogelijkheden

CategorieTools (selectie)Wat het beantwoordt
Oriëntatieserver_info, diagnose_runtimeWelke roots toegankelijk zijn, of de runtimes gezond zijn
Projecten en historiescan_project, list_snapshots, snapshot_diff, quality_gateDe graph bouwen of verversen, wat er tussen twee scans veranderde, of een wijziging architectuurbudgetten doorbreekt
Componenten vinden en lezenfind_component, inspect_component, list_usages, architecture_summaryKandidaten bij een halve naam, de rollen en relaties van een component, elke usage met bewijs
Structuur- en impactanalyseimpact_analysis, explain_flow, dependency_cycles, change_impact, test_impact, review_diffWat van een symbol afhangt, hoe A bij B komt, circulaire afhankelijkheden, hoe ver een wijziging uitstraalt, welke tests erdoor geraakt worden
Onderhoudannotate_component, remove_project, cleanup_stale_scans, maintain_databaseEen blijvende annotatie vastleggen, projecten opruimen, database-integriteit bewaken
TaalExtractieFramework-verrijking
PHP 8.3+Declaraties, overerving, aanroepen, constructie, types, injectieLaravel, Symfony
TypeScript/JavaScriptCompiler-symboolresolutie, imports, aanroepen, typesNext.js, React, Vue, stores, endpoints
Python 3.11+AST uit de standaardbibliotheek, in een geïsoleerde interpreterFastAPI, Django, Celery

Gemengde repositories komen samen in één graph. impact_analysis en verwante tools labelen elke conclusie met een confidence (certain, probable, possible) in plaats van hem als zekerheid te presenteren.

Configuratie

Knossos-MCP leest knossos.json (of knossos.jsonc) uit de root van het gescande project. Dit is de configuratie van Knossos-MCP zelf:

json
{
  "$schema": "./schemas/project-config-v1.schema.json",
  "version": 1,
  "ignores": ["tests/Fixtures"],
  "boundaries": [
    { "name": "core", "path_prefix": "src" },
    { "name": "php-worker", "path_prefix": "workers/php" },
    { "name": "typescript-worker", "path_prefix": "workers/typescript" },
    { "name": "python-worker", "path_prefix": "workers/python" },
    { "name": "tooling", "path_prefix": "tools" },
    { "name": "tests", "path_prefix": "tests" }
  ],
  "policies": [
    {
      "id": "workers-are-out-of-process",
      "from_boundary": "php-worker",
      "deny_targets": ["core"]
    }
  ],
  "quality_budgets": {
    "new_cycles": 0,
    "boundary_violations": 0,
    "error_diagnostics": 0,
    "warning_diagnostics": 0,
    "hub_degree_growth": 25,
    "unreferenced_candidates": 110
  }
}

boundaries verdeelt de codebase in benoemde grenzen; policies verbiedt specifieke relaties tussen die grenzen, en check_architecture toetst elke wijziging eraan. quality_budgets zet harde drempels op regressies zoals nieuwe circulaire afhankelijkheden of grensoverschrijdingen, gecontroleerd door quality_gate.