Citadel MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| docsA | Run JavaScript in a local Node sandbox. Write ONE async arrow function that returns a value. Inside the sandbox you have:
Fan out independent calls with Promise.all — that is why this tool exists. N tool calls collapse into one MCP round-trip. Available tools:
type NextjsDocsInput = {
/** Documentation path (e.g., '/docs/app/api-reference/functions/refresh'). Do NOT include a '.md' suffix — the tool appends it. Get valid paths by calling codemode.nextjs_index() first. App Router only — Pages Router paths ('/docs/pages/...') are not supported. /
path: string;
/* Optional anchor/section from the index (e.g., 'usage'). Included in response metadata to indicate relevant section. /
anchor?: string;
};
type NextjsDocsOutput = {
path: string;
url?: string;
content?: string;
anchor?: string | null;
error?: string;
message?: string;
};
type ReactDocsInput = {
/* Documentation path (e.g., '/learn/react-compiler.md' or '/reference/react/useState.md'). The path includes the .md suffix as listed in the index. Get valid paths by calling codemode.react_index() first. /
path: string;
};
type ReactDocsOutput = {
path: string;
url?: string;
content?: string;
anchor?: string | null;
error?: string;
message?: string;
};
type TurborepoDocsInput = {
/* Documentation path (e.g., '/guides/tools/docker.md', '/reference/run.md', or 'index.md'). Paths are relative to '/docs/'; the tool resolves them under turborepo.dev/docs/. Get valid paths by calling codemode.turborepo_index() first. /
path: string;
};
type TurborepoDocsOutput = {
path: string;
url?: string;
content?: string;
anchor?: string | null;
error?: string;
message?: string;
};
type SupabaseDocsInput = {
/* Guide path (e.g., '/docs/guides/functions/auth'). Must start with '/docs/guides/'. Do NOT include a '.md' suffix — the tool appends it. Get valid paths by calling codemode.supabase_index() first. /
path: string;
};
type SupabaseDocsOutput = {
path: string;
url?: string;
content?: string;
anchor?: string | null;
error?: string;
message?: string;
};
type EffectDocsInput = {
/* Documentation path (e.g., '/docs/batching/' or '/docs/schema/introduction/'). Paths are pathnames from effect.website with the trailing slash, exactly as listed in the index. Get valid paths by calling codemode.effect_index() first. /
path: string;
};
type EffectDocsOutput = {
path: string;
url?: string;
content?: string;
anchor?: string | null;
error?: string;
message?: string;
};
type OxcDocsInput = {
/* Documentation path from the index (e.g., '/docs/guide/usage/linter/automatic-fixes.md'). Paths already include the '.md' suffix as listed in the index. Get valid paths by calling codemode.oxc_index() first. /
path: string;
};
type OxcDocsOutput = {
path: string;
url?: string;
content?: string;
anchor?: string | null;
error?: string;
message?: string;
};
type TanstackStartDocsInput = {
/* Documentation path from the index (e.g., '/start/latest/docs/framework/react/overview'). Do NOT include a '.md' suffix — the tool appends it. Get valid paths by calling the matching codemode.tanstack_index() first. /
path: string;
};
type TanstackStartDocsOutput = {
path: string;
url?: string;
content?: string;
anchor?: string | null;
error?: string;
message?: string;
};
type TanstackRouterDocsInput = {
/* Documentation path from the index (e.g., '/start/latest/docs/framework/react/overview'). Do NOT include a '.md' suffix — the tool appends it. Get valid paths by calling the matching codemode.tanstackindex() first. /
path: string;
};
type TanstackRouterDocsOutput = {
path: string;
url?: string;
content?: string;
anchor?: string | null;
error?: string;
message?: string;
};
type TanstackQueryDocsInput = {
/* Documentation path from the index (e.g., '/start/latest/docs/framework/react/overview'). Do NOT include a '.md' suffix — the tool appends it. Get valid paths by calling the matching codemode.tanstack_index() first. /
path: string;
};
type TanstackQueryDocsOutput = {
path: string;
url?: string;
content?: string;
anchor?: string | null;
error?: string;
message?: string;
};
type DocsSearchInput = {
/* Free-text search query. Tokenized on whitespace and punctuation. /
query: string;
/* Stacks to search (e.g. ['nextjs', 'react']). Defaults to all registered stacks. /
stacks?: string[];
/* Maximum matches to return. Default 10. /
limit?: number;
/* When true, fan out doc fetches in parallel and attach /**
Example (parallel cross-stack survey, the common case): Example (parallel cross-stack survey): async () => { const [nextjsIdx, reactIdx, turborepoIdx, supabaseIdx, effectIdx, oxcIdx, tanstack_startIdx, tanstack_routerIdx, tanstack_queryIdx] = await Promise.all([ codemode.nextjs_index(), codemode.react_index(), codemode.turborepo_index(), codemode.supabase_index(), codemode.effect_index(), codemode.oxc_index(), codemode.tanstack_start_index(), codemode.tanstack_router_index(), codemode.tanstack_query_index(), ]); // Pick relevant paths from each index, then fan out doc fetches with another Promise.all. return { nextjsIdx, reactIdx, turborepoIdx, supabaseIdx, effectIdx, oxcIdx, tanstack_startIdx, tanstack_routerIdx, tanstack_queryIdx }; } Return the value the caller needs. If you console.log, output is captured in a [logs] block alongside the result. For deeper patterns read the MCP resource |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| agent-usage | Full playbook for writing `docs` calls against the Citadel codemode SDK: workflow, parallel fan-out patterns, error handling, common mistakes. Read once before your first `docs` call. |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sustinbebustin/citadel-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server