MCP Servers
Model Context Protocol (MCP) servers extend Cursor agents with domain-specific tools and resources. They are registered in ~/.cursor/mcp.json and are available in every Cursor conversation.
Registered MCP Servers
Canonical register: platform/registry/mcp/*/mcp.yaml. Source of truth for agents is that directory (plus Cursor ~/.cursor/mcp.json for IDE wiring).
| Server | Port / Location | Purpose |
|---|---|---|
famulus-mcp (gateway) |
platform/mcp-server · streamable HTTP :5090 · launchd com.ai-platform.mcp-gateway |
The one entry of every client: live catalog, mcp_find, mcp_call, pinned tools; see Famulus MCP |
ai-catalog |
registry/mcp/ai-catalog/ · stdio |
Project catalog queries (ports, machines, git status) |
lwgrammar |
Port 5116 · http://127.0.0.1:5116/mcp · registry/mcp/lwgrammar/ |
Central language hub (dictionary, lector, rules, situate/gate) |
famulus-reference |
Port 5135 · http://127.0.0.1:5135/mcp · registry/mcp/famulus-reference/ · pdai/famulus-reference |
Famulus reference over the DuckLake: items by fr: address, citations, traces, grounding, read-only SQL; harvest routes |
korrespondenz |
registry/mcp/korrespondenz/ · stdio · apps/privatkanzlei |
Private correspondence (PrivatKanzlei) |
lettre-pdai |
registry/mcp/lettre-pdai/ · stdio |
PDAI pipeline — OCR, figures, entities, structure tagging |
mcp-apple-dev |
registry/mcp/mcp-apple-dev/ · apps/ai-applevoicerecorder/mcp-apple-dev |
iOS/macOS — Xcode, TestFlight, simulator, Swift packages |
cursor-ide-browser |
Built-in · registry/mcp/cursor-ide-browser/ |
Browser automation and web testing |
cursor-app-control |
Built-in (Cursor) | Control Cursor IDE (move root, create project) |
ai-catalog
The ai-catalog MCP server indexes all projects across the three domain catalogs (~/ai-mac-studio/agents/index.duckdb, ~/ai-mac-studio/scholarly/index.duckdb, ~/ai-mac-studio/publication/index.duckdb) and exposes them as queryable tools.
~/ai-mac-studio exists only on mac-studio. Client machines (e.g. openscience) use ~/ai-openscience, a Syncthing mirror of the same tree; substitute that prefix in the paths on this page.
Tools
| Tool | Parameters | Description |
|---|---|---|
stats |
— | Total project count and size per domain |
list_categories |
folder |
List categories and project counts within a domain |
find_project |
name, folder? |
Search for a project by name across all domains |
query_projects |
folder, sql |
Run arbitrary SELECT on the projects table |
DuckDB Schema
CREATE TABLE projects (
name VARCHAR, -- package name (e.g. "ai-scholar")
category VARCHAR, -- category (e.g. "document-processing")
path VARCHAR, -- absolute resolved path
size_kb BIGINT, -- directory size in KB
description VARCHAR, -- extracted from README.md
last_commit VARCHAR, -- most recent git commit hash
git_remote VARCHAR, -- git remote URL
indexed_at VARCHAR -- ISO timestamp of last indexing
);Example Queries
# Domain overview
stats()
# All infrastructure packages sorted by size
query_projects(
folder="ai-agents",
sql="SELECT name, size_kb FROM projects WHERE category='infrastructure' ORDER BY size_kb DESC"
)
# Largest research projects
query_projects(
folder="ai-scholarly",
sql="SELECT name, category, size_kb FROM projects ORDER BY size_kb DESC LIMIT 10"
)
# Find a specific project
find_project(name="ai-korrespondenz")
# All projects with a web server (approximation: has a port in description)
query_projects(
folder="ai-agents",
sql="SELECT name, category, description FROM projects WHERE description LIKE '%Port%'"
)Keeping the Catalog Fresh
The catalog is re-indexed by running:
python3 ~/ai-mac-studio/agents/index_catalog.py # all three domains
python3 ~/ai-mac-studio/agents/index_catalog.py --folder ai-agents
python3 ~/ai-mac-studio/agents/index_catalog.py --folder ai-scholarlyThis script scans each domain directory, extracts metadata from pyproject.toml/README.md, reads git history, and writes to the three .duckdb files.
cursor-app-control
Built-in MCP server that controls the Cursor IDE itself.
| Tool | Description |
|---|---|
move_agent_to_root |
Change the current agent’s workspace root directory |
create_project |
Create a directory with git init and move to it |
Use case: After creating a git worktree or a new project, call move_agent_to_root to continue working in the new directory without opening a new Cursor window.
cursor-ide-browser
Built-in MCP server for browser automation and web testing.
| Tool | Description |
|---|---|
browser_navigate |
Navigate to a URL |
browser_snapshot |
Get current page structure (ARIA snapshot + refs) |
browser_take_screenshot |
Capture viewport screenshot |
browser_click |
Click an element by ref |
browser_fill |
Fill an input field |
browser_scroll |
Scroll the page |
browser_tabs |
List/manage open tabs |
browser_console_messages |
Read browser console output |
browser_network_requests |
Inspect network requests |
Use for: Testing web UIs after changes; verifying service health; form interactions.
Key rule: Always call browser_snapshot before interactions to get current refs. Never reuse refs from an older snapshot after page changes.
ai-platform-mcp
Top-level orchestrator (proxied_via: ~). Multiplexes to korrespondenz, lettre-pdai, lwgrammar, ai-catalog, cursor-ide-browser, and related servers.
| Tool | Description |
|---|---|
list_agents / get_agent |
Registry agents |
list_skills / get_skill |
Registry skills |
list_instructions / render_instruction |
Instruction templates |
mcp_catalog / mcp_find / mcp_describe |
Tree, search and full description of every backend tool |
mcp_call / mcp_refresh |
Forward a call to a backend; re-read the backends’ tool lists |
list_projects / find_project / port_status |
Catalog / port status |
Launch: python3.14 -m ai_platform_mcp with cwd platform/mcp-server.
lettre-pdai
PDAI document processing MCP (stdio, proxied via ai-platform-mcp).
| Tool | Description |
|---|---|
process_document |
Full PDAI processing pipeline |
ocr_document |
OCR |
extract_figures |
Figure extraction |
extract_entities |
Entity recognition |
tag_structure |
Structure tagging |
list_collections |
List collections |
get_document |
Fetch a document |
Register entry: platform/registry/mcp/lettre-pdai/mcp.yaml.
mcp-apple-dev
iOS/macOS development MCP (stdio, proxied via ai-platform-mcp). Lives under apps/ai-applevoicerecorder/mcp-apple-dev (Xcode workspace OpenScienceTechnology.xcworkspace).
Covers Xcode scheme management, TestFlight build status, simulator control, and Swift package operations. See platform/registry/mcp/mcp-apple-dev/mcp.yaml.
korrespondenz
Correspondence MCP for PrivatKanzlei (privat/privatkanzlei): launchd service com.privatkanzlei.korrespondenz-mcp on 127.0.0.1:5301 (one worker process per call, read-only archive for read tools), reached through the gateway as namespace korrespondenz.
| Tool | Description |
|---|---|
send_letter |
Send / queue a letter |
list_letters |
List letters |
search_letters |
Search correspondence |
get_letter |
Fetch one letter |
lwgrammar
Streamable-HTTP language institution on port 5116 (GET /health, MCP at /mcp). Launchd: com.ai-platform.lwgrammar-mcp. Register: platform/registry/mcp/lwgrammar/mcp.yaml.
Core tools include lw_term, lw_usage_rules, lw_lector, lw_rule_conformity, lw_situate, lw_gate, and related lw_* dictionary/mode/cite helpers.
famulus-reference
Streamable-HTTP server on port 5135 (GET /health, MCP at /mcp; tailnet http://mac-studio.tail147011.ts.net:5135/mcp), proxied via ai-platform-mcp. Runs on mac-studio only, launchd com.ai-platform.famulus-reference-mcp; attaches the DuckLake read replica READ_ONLY. Register: platform/registry/mcp/famulus-reference/mcp.yaml. Route /famulus-reference is deploy: planned.
| Tool | Returns |
|---|---|
fr_list_collections, fr_describe_collection |
collections; metadata, data source origin, identifiers, DTDs, counts |
fr_get_dtd, fr_get_structure, fr_list_segments, fr_get_item, fr_get_sidecars |
DTD, structure, segments, single items, extension tables |
fr_get_provenance |
provenance chain and source origin |
fr_cite, fr_bibtex |
BibTeX, CSL-JSON, text citation; gaps reported, never filled |
fr_trace |
validation and justification record of an item |
fr_ground |
lexical grounding hits with fr: address, snippet, citation |
fr_sql |
read-only SQL (guarded, max. 500 rows) |
fr_snapshot_info, fr_trace_run |
lake snapshot; justification of a past answer by run_id |
HTTP routes on the same port: /oai (OAI-PMH 2.0), /jsonld/<coll>, /iiif/<coll>/<doc>/manifest.json, /peers. Concept: Famulus reference.
Adding a New MCP Server
Write the server using the MCP SDK (or FastMCP):
from mcp.server.fastmcp import FastMCP mcp = FastMCP("my-server") @mcp.tool() def my_tool(query: str) -> str: """Tool description shown to agents.""" return do_something(query) if __name__ == "__main__": mcp.run()Register in
~/.cursor/mcp.json:{ "mcpServers": { "my-server": { "command": "uv", "args": ["run", "--project", "/path/to/project", "python", "-m", "my_module.mcp_server"] } } }Use patterns from
~/ai-mac-studio/platform/shared/mcp/for consistency.Document the server here and in
platform/AGENTS.md.
Last updated: 2026-09-13