docs-mcp
Remote MCP server for Tandem docs, install guides, SDKs, workflows, and agent setup help.
Should I use this
Quality & Safety
Findings (4)
- LOWin refresh_docs_index
- LOWin refresh_doc_page
- LOWin compare_docs_index_refresh
- LOWin compare_doc_page_refresh
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Uptime
Probed every 10 minutes. Showing last 100 samples.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"docs-mcp": {
"url": "https://tandem.ac/mcp"
}
}
}Remote endpoints
https://tandem.ac/mcpstreamable-httpWhat it can do
Tool inventory
Tools (13)
🟢search_docs(query, docs_ref, engine_version, limit, audience)
Search the published Tandem docs index for relevant pages.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The Tandem question, task, or keyword query to search for."
},
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable. Use next, refs/<sha>, or releases/<version> only when explicitly needed."
},
"engine_version": {
"type": "string",
"description": "Optional Tandem engine version hint. If supplied without docs_ref, the MCP still defaults to stable unless a matching versioned docs ref is configured."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Maximum number of matching docs pages to return."
},
"audience": {
"type": "string",
"description": "Optional audience filter such as developer, desktop user, or operator."
}
},
"required": [
"query"
]
}🟢get_doc(path, docs_ref, engine_version)
Fetch and normalize a published Tandem docs page by path or URL.
Input Schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Docs path like /sdk/python/ or a full Tandem docs URL."
},
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable."
},
"engine_version": {
"type": "string",
"description": "Optional Tandem engine version hint for compatibility checks."
}
},
"required": [
"path"
]
}🟢get_start_path(role, docs_ref)
Recommend the best Tandem docs starting path for a desktop user, server admin, or developer.
Input Schema
{
"type": "object",
"properties": {
"role": {
"type": "string",
"enum": [
"desktop",
"server_admin",
"developer"
],
"description": "The user role to optimize the docs starting point for."
},
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable."
}
},
"required": [
"role"
]
}🟢recommend_next_docs(current_path, docs_ref, goal, limit)
Recommend the next Tandem docs to read after a current page, optionally biased toward a goal.
Input Schema
{
"type": "object",
"properties": {
"current_path": {
"type": "string",
"description": "Current Tandem docs path the user has already read."
},
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable."
},
"goal": {
"type": "string",
"description": "Optional goal such as install Tandem, use the Python SDK, or build workflows."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Maximum number of next-doc recommendations to return."
}
},
"required": [
"current_path"
]
}🟢answer_how_to(task, docs_ref, engine_version, audience, limit)
Answer how to install or use Tandem, build workflows, or use the SDKs by synthesizing relevant published docs.
Input Schema
{
"type": "object",
"properties": {
"task": {
"type": "string",
"description": "The Tandem task or question that needs a docs-grounded answer."
},
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable."
},
"engine_version": {
"type": "string",
"description": "Optional Tandem engine version hint. Prefer stable docs for installed engines."
},
"audience": {
"type": "string",
"description": "Optional audience hint such as developer, desktop user, or operator."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Maximum number of supporting docs recommendations to include."
}
},
"required": [
"task"
]
}🟢get_tandem_guide(topic, docs_ref)
Return a structured Tandem learning guide for install-engine, python-sdk, typescript-sdk, build-workflows, or headless-deploy.
Input Schema
{
"type": "object",
"properties": {
"topic": {
"type": "string",
"enum": [
"install-engine",
"python-sdk",
"typescript-sdk",
"build-workflows",
"headless-deploy"
],
"description": "Named Tandem learning guide to return."
},
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable."
}
},
"required": [
"topic"
]
}⚪warmup_docs_cache(force_refresh, docs_ref)
Refresh the docs index and preload the most important Tandem docs pages into cache.
Input Schema
{
"type": "object",
"properties": {
"force_refresh": {
"type": "boolean",
"description": "Whether to bypass cache and force fresh upstream fetches first."
},
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable."
}
}
}🟢get_docs_cache_status
Inspect the current docs cache state for index sources and warmed pages.
Input Schema
{
"type": "object",
"properties": {}
}⚪refresh_docs_index(force_refresh, docs_ref)
Force-refresh docs indexes and report whether data came from the network, cache, or stale fallback.
Input Schema
{
"type": "object",
"properties": {
"force_refresh": {
"type": "boolean",
"description": "Whether to bypass cache and force a network refresh attempt."
},
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable."
}
}
}⚪refresh_doc_page(path, docs_ref, force_refresh)
Force-refresh a docs page and report whether content came from the network, cache, or stale fallback.
Input Schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Docs path like /start-here/ or /sdk/python/ to refresh."
},
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable."
},
"force_refresh": {
"type": "boolean",
"description": "Whether to bypass cache and force a network refresh attempt."
}
},
"required": [
"path"
]
}⚪invalidate_docs_cache(target, path, docs_ref)
Invalidate docs cache entries for index data, all pages, or a specific page path.
Input Schema
{
"type": "object",
"properties": {
"target": {
"type": "string",
"enum": [
"all",
"index",
"pages",
"page"
],
"description": "Which cache area to invalidate."
},
"path": {
"type": "string",
"description": "Required when target is page; identifies the specific docs path to invalidate."
},
"docs_ref": {
"type": "string",
"description": "Optional docs ref to scope page/index cache invalidation."
}
}
}⚪compare_docs_index_refresh(docs_ref)
Force-refresh the docs indexes and return before/after hashes so content changes can be proven.
Input Schema
{
"type": "object",
"properties": {
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable."
}
}
}⚪compare_doc_page_refresh(path, docs_ref)
Force-refresh a docs page and return before/after hashes so page content changes can be proven.
Input Schema
{
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Docs path like /start-here/ or /sdk/python/ to compare before and after refresh."
},
"docs_ref": {
"type": "string",
"description": "Docs channel or immutable ref. Defaults to stable."
}
},
"required": [
"path"
]
}Compare
Peer Comparison
Compare this server with others in the same category.
Version History
Details
- + search_docs
- + get_doc
- + get_start_path
- + recommend_next_docs
- + answer_how_to
- + get_tandem_guide
- + warmup_docs_cache
- + get_docs_cache_status
- + refresh_docs_index
- + refresh_doc_page
- + invalidate_docs_cache
- + compare_docs_index_refresh
- + compare_doc_page_refresh
Details
- + search_docs
- + get_doc
- + get_start_path
- + recommend_next_docs
- + answer_how_to
- + get_tandem_guide
- + warmup_docs_cache
- + get_docs_cache_status
- + refresh_docs_index
- + refresh_doc_page
- + invalidate_docs_cache
- + compare_docs_index_refresh
- + compare_doc_page_refresh
Details
- + search_docs
- + get_doc
- + get_start_path
- + recommend_next_docs
- + answer_how_to
- + get_tandem_guide
- + warmup_docs_cache
- + get_docs_cache_status
- + refresh_docs_index
- + refresh_doc_page
- + invalidate_docs_cache
- + compare_docs_index_refresh
- + compare_doc_page_refresh
Details
- + search_docs
- + get_doc
- + get_start_path
- + recommend_next_docs
- + answer_how_to
- + get_tandem_guide
- + warmup_docs_cache
- + get_docs_cache_status
- + refresh_docs_index
- + refresh_doc_page
- + invalidate_docs_cache
- + compare_docs_index_refresh
- + compare_doc_page_refresh
Details
- + search_docs
- + get_doc
- + get_start_path
- + recommend_next_docs
- + answer_how_to
- + get_tandem_guide
- + warmup_docs_cache
- + get_docs_cache_status
- + refresh_docs_index
- + refresh_doc_page
- + invalidate_docs_cache
- + compare_docs_index_refresh
- + compare_doc_page_refresh
Details
- + search_docs
- + get_doc
- + get_start_path
- + recommend_next_docs
- + answer_how_to
- + get_tandem_guide
- + warmup_docs_cache
- + get_docs_cache_status
- + refresh_docs_index
- + refresh_doc_page
- + invalidate_docs_cache
- + compare_docs_index_refresh
- + compare_doc_page_refresh
Details
- + search_docs
- + get_doc
- + get_start_path
- + recommend_next_docs
- + answer_how_to
- + get_tandem_guide
- + warmup_docs_cache
- + get_docs_cache_status
- + refresh_docs_index
- + refresh_doc_page
- + invalidate_docs_cache
- + compare_docs_index_refresh
- + compare_doc_page_refresh
Details
- + search_docs
- + get_doc
- + get_start_path
- + recommend_next_docs
- + answer_how_to
- + get_tandem_guide
- + warmup_docs_cache
- + get_docs_cache_status
- + refresh_docs_index
- + refresh_doc_page
- + invalidate_docs_cache
- + compare_docs_index_refresh
- + compare_doc_page_refresh
Details
- + search_docs
- + get_doc
- + get_start_path
- + recommend_next_docs
- + answer_how_to
- + get_tandem_guide
- + warmup_docs_cache
- + get_docs_cache_status
- + refresh_docs_index
- + refresh_doc_page
- + invalidate_docs_cache
- + compare_docs_index_refresh
- + compare_doc_page_refresh
Details
- + search_docs
- + get_doc
- + get_start_path
- + recommend_next_docs
- + answer_how_to
- + get_tandem_guide
- + warmup_docs_cache
- + get_docs_cache_status
- + refresh_docs_index
- + refresh_doc_page
- + invalidate_docs_cache
- + compare_docs_index_refresh
- + compare_doc_page_refresh
Community
Evidence