Skip to content

MCP increment 1: the /mcp server (core module, off by default) - #138

Merged
WebTigers merged 1 commit into
mainfrom
feat/mcp-server
Aug 17, 2026
Merged

MCP increment 1: the /mcp server (core module, off by default)#138
WebTigers merged 1 commit into
mainfrom
feat/mcp-server

Conversation

@WebTigers

Copy link
Copy Markdown
Owner

Increment 1 of TigerMCP (TIGERMCP.md §11): Tiger as an MCP server. An external AI client (Claude Desktop/Code, Cursor, ChatGPT) drives the install through the same token-authenticated, ACL-gated /api surface the browser + in-app agent use — reach, not capability. One endpoint, /mcp, off by default.

What ships

  • Tiger_Mcp — facade: the enable gate (tiger.mcp.enabled, OFF by default) + protocol-version negotiation.
  • Tiger_Mcp_Server — the JSON-RPC 2.0 engine: initialize / tools/list / tools/call / ping; notifications ignored, batch refused. tools/list = Tiger_Agent_Tools::catalog($role) → MCP tools (module__service__method, permissive inputSchema — Form typing is increment 2); tools/call parses the name and runs the op through a dispatch seam, wrapping the /api envelope as MCP content (isError on result=0).
  • modules/mcpMcp_ServerController (reads the JSON-RPC body, resolves the Bearer token identity else session — mirroring ServiceFactory — and dispatches tools/call via ServiceFactory as that identity), routes.ini (/mcp, ingested by the module-routes consumer), acl.ini (public controller like ApiController; the token + each service's own ACL do the real gating). Disabled → /mcp 404s.

Why thin

No new engine or privilege — an MCP tool call is an /api call under a different envelope, reusing the built Bearer auth, ACL, tool reflection, and dispatch.

Tests + live

Engine unit (lifecycle, name round-trip, envelope wrapping, batch/notification/unknown) + controller integration (404 disabled · initialize serverInfo · tools/list reflects the admin catalog). 831 unit + 1099 integration green. Verified live on tiger-dev over HTTP: 404 disabled → initialize handshake (serverInfo {name:"Tiger"}) → tools/list reflecting the role surface (docs__search__query, …).

🤖 Generated with Claude Code

Tiger as an MCP server (TIGERMCP.md §11 step 1). An external AI client drives the
install through the SAME token-authenticated, ACL-gated /api surface — reach, not
capability.

- Tiger_Mcp — facade: the enable gate (tiger.mcp.enabled, OFF by default) + protocol
  version negotiation.
- Tiger_Mcp_Server — the JSON-RPC 2.0 engine: initialize / tools/list / tools/call /
  ping, notifications ignored, batch refused. tools/list = Tiger_Agent_Tools::catalog
  (role) serialized to MCP tools (name = module__service__method, permissive
  inputSchema for now — Forms typing is increment 2); tools/call parses the name and
  runs the op through a dispatch seam, wrapping the /api envelope as MCP content
  (isError on result=0).
- modules/mcp — Mcp_ServerController (the /mcp HTTP surface: reads the JSON-RPC body,
  resolves the Bearer token identity else session — mirrors ServiceFactory — and
  dispatches tools/call via ServiceFactory as that identity), routes.ini (/mcp, via
  the module-routes ingester), acl.ini (public controller like ApiController; the
  token + each service's own ACL do the real gating). OFF by default → /mcp 404s.
- Tests: engine unit (lifecycle, name mapping, envelope wrapping, batch/notification/
  unknown) + controller integration (404 disabled, initialize serverInfo, tools/list
  reflects the admin catalog). Verified live on dev over HTTP.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@WebTigers
WebTigers merged commit 247fef8 into main Aug 17, 2026
13 checks passed
@WebTigers
WebTigers deleted the feat/mcp-server branch August 17, 2026 19:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant