Part of #1 and #6 (project bootstrap, v0.1, phase 5 split). Blocked by 5a.
Deliverables
core/router/
Router interface — Narrow(ctx, userMessage, *mcp.Catalog) ([]mcp.Tool, error).
PassThrough — returns the full catalog; useful for small MCPs and large models.
ToolkitClassifier — first-pass call against the same provider.Provider asking "which toolkits are likely needed?" then returns those toolkits' tools. Plexara's datahub_* / trino_* / s3_* / memory_* namespaces map cleanly via mcp.Catalog.Toolkits().
- The classifier prompt and toolkit definitions land under
docs/prompts/ so they're reviewable and version-controlled.
Tests
PassThrough correctness (returns input verbatim).
ToolkitClassifier against provider.FakeProvider with scripted responses for various user messages.
- Edge cases: empty catalog, classifier returns "all", classifier returns unknown toolkit name.
Out of scope
Branch
feat/bootstrap-router (off main after 5a merges)
Spec: §6.6 of the bootstrap spec in #1.
Part of #1 and #6 (project bootstrap, v0.1, phase 5 split). Blocked by 5a.
Deliverables
core/router/Routerinterface —Narrow(ctx, userMessage, *mcp.Catalog) ([]mcp.Tool, error).PassThrough— returns the full catalog; useful for small MCPs and large models.ToolkitClassifier— first-pass call against the sameprovider.Providerasking "which toolkits are likely needed?" then returns those toolkits' tools. Plexara'sdatahub_*/trino_*/s3_*/memory_*namespaces map cleanly viamcp.Catalog.Toolkits().docs/prompts/so they're reviewable and version-controlled.Tests
PassThroughcorrectness (returns input verbatim).ToolkitClassifieragainstprovider.FakeProviderwith scripted responses for various user messages.Out of scope
core/loop(phase 5c)Branch
feat/bootstrap-router(offmainafter 5a merges)Spec: §6.6 of the bootstrap spec in #1.