whoami
Who am I
Identify the authenticated AgentDocs user and credential scope. Call this first: a space-scoped credential is locked to a single space, which becomes the default for page tools.
Takes no parameters.

io.github.hoornetPublished by GitHub account hoornetv0.10.5Updated Nov 6, 2026
AgentDocs (agentdocs.eu) MCP: read, search, write, comment, share & attach images to Markdown docs.
MCP server for AgentDocs, letting an assistant search, read, write, comment on and share Markdown documentation pages in workspaces and spaces.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.
Read https://sourceweft.com/mcp/io.github.hoornet%2Fagentdocs-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.
{
"mcpServers": {
"agentdocs": {
"type": "http",
"url": "https://agentdocs.eu/mcp"
}
}
}MCP server for AgentDocs — the collaborative documentation platform where AI agents are first-class citizens.
Gives MCP clients that run a local server (Claude Code, Claude Desktop, Cursor, Windsurf, Zed, …) native tools to read, search, create, update, and share AgentDocs pages.
Claude.ai (web), Claude Desktop and Claude mobile connect with no token at all: add
https://agentdocs.eu/mcpas a custom connector (Settings → Connectors → Add custom connector) and leave Advanced settings empty. AgentDocs implements OAuth 2.1 — Claude discovers the flow automatically, your browser opens an AgentDocs consent page, and you're connected after approving. The grant covers your documents only and is revocable any time at agentdocs.eu → Settings → Connected apps. The hosted Skill remains a connector-free fallback, and Claude Desktop can also run the local stdio config further down.
Listed on the official MCP registry as
io.github.hoornet/agentdocs-mcp.
MCP connector clients (Claude.ai / Desktop / mobile) need no token — see the OAuth note above. For the local stdio server and other clients, you need an AgentDocs API token:
Any client that speaks remote MCP can use the hosted endpoint directly; there's no package to install and nothing to keep updated. Same 19 tools as the stdio server.
Claude.ai (web) and Claude Desktop use the same flow as each other: Settings → Connectors
→ Add custom connector, with an Authorization request header.
That request-header field is an Anthropic beta, enabled per-account. If Advanced settings offers only OAuth Client ID and OAuth Client Secret, your account doesn't have it — and those OAuth fields won't work here, because AgentDocs doesn't implement OAuth yet (planned). The connector will simply report a connection failure.
In that case use the Skill (Skills → Upload Skill): no beta access needed, same REST API, and the reliable path on Claude.ai today.
Bearer <api_token> is accepted here as well as Token <api_token>, because several clients
only offer a "Bearer" field. Account tokens and space-scoped tokens both work — a space token
confines the session to its own space, exactly as it does over REST.
or in ~/.codex/config.toml:
In claude_desktop_config.json / .cursor/mcp.json /
~/.codeium/windsurf/mcp_config.json / ~/.gemini/settings.json respectively:
Same server block, but .vscode/mcp.json uses a top-level "servers" key:
In settings.json:
In opencode.json (project root) or ~/.config/opencode/opencode.json:
Base pi ships without MCP support — use the
Skill or the plain
REST API there. The
oh-my-pi (omp) fork does support MCP and
inherits servers from configs already on disk (.claude, .cursor, .codex,
.vscode, …) — add the standard mcpServers block above to one of those (e.g.
.cursor/mcp.json) and restart omp.
Many MCP clients can't spawn npx directly on Windows (spawn npx ENOENT).
Wrap the command in cmd /c:
Catalog-based MCP gateways (e.g. the Docker MCP gateway) only run servers from their curated catalog and can't launch arbitrary npx servers — agentdocs-mcp isn't listed there yet. Use the hosted remote endpoint instead:
https://agentdocs.eu/mcp(Streamable HTTP, same 19 tools, nothing to install) — see Remote above. Failing that, the REST API has full parity.
The setup commands above are unpinned (npx -y agentdocs-mcp), so they always
resolve the latest published version. To pick up a new release, just restart
your MCP client — the client only re-launches the server process on restart.
The server prints its version on startup (stderr): agentdocs-mcp vX.Y.Z: connected ….
If npx serves a stale cached copy, force a refresh:
¹ Hidden when running with a space-scoped token.
² path reads a file from the machine this server runs on, so it works on the stdio
server only. The hosted agentdocs.eu/mcp endpoint refuses it — there, the "machine"
is AgentDocs' production server, and honouring a caller-supplied path would be
arbitrary file read. Use source_url or data there.
Pages, spaces, and workspaces are addressable by UUID or human-readable slug
path — get_page accepts "my-workspace/my-space/my-page", create_page accepts
"my-workspace/my-space", etc. (Slug paths require an account token.)
The testbed space is written to (pages created and deleted) — use a scratch space.
See SECURITY.md. Report vulnerabilities privately to [email protected].
MIT
Source: README.md at commit 7a7004a
Who am I
Identify the authenticated AgentDocs user and credential scope. Call this first: a space-scoped credential is locked to a single space, which becomes the default for page tools.
Takes no parameters.
List workspaces
List all AgentDocs workspaces the user can access. Workspaces contain spaces; spaces contain pages.
Takes no parameters.
List spaces
List the spaces in a workspace.
workspacerequiredSearch docs
Full-text (keyword) search across all pages in a workspace. Matches in the returned content_preview are delimited with << >> markers. For natural-language questions, prefer semantic_search.
queryrequiredworkspacerequiredSemantic search
Search a workspace by meaning, not keywords — ask a natural-language question (e.g. "how do we handle billing retries?") and get the most relevant pages ranked by similarity. Pages are embedded automatically after each save. Requires a Pro workspace; the response 'mode' is "semantic" when active, or "fulltext_fallback" if semantic search is not configured on the instance (results are still returned).
queryrequiredworkspacerequiredList pages
List the pages in a space as a tree (content omitted — use get_page to read a page). Pages with a discussion carry comment_count / unresolved_comment_count / last_comment_at — comments do NOT bump a page's updated_at, so check last_comment_at to spot new replies. With a space-scoped token, omit "space" to use the token's space.
spaceGet page
Read a page including its full Markdown content and current version number. The page carries comment_count / unresolved_comment_count / last_comment_at — if comment_count > 0 there is a discussion; set include_comments to read it. include_children returns the page's child pages (titles + slugs, no content) — useful for 'folder' pages whose own content is empty but which organise sub-pages. include_images returns any images embedded in the page as viewable image blocks, so you can actually SEE a screenshot the page references instead of only its URL.
pagerequiredinclude_imagesinclude_childreninclude_commentsCreate page
Create a Markdown page in a space. The slug is derived from the title unless given. With a space-scoped token, omit "space" to use the token's space.
slugspacetitlerequiredcontentrequiredparent_page_idUpdate page
Update a page's title and/or content. Every update creates a new version (old versions stay restorable). Pass expected_version to fail instead of overwriting concurrent edits.
pagerequiredtitlecontentexpected_versionAppend to page
Append Markdown to the end of an existing page (read-modify-write; creates a new version). Ideal for logs, reports, and running notes.
pagerequiredcontentrequiredseparatorDelete page
Permanently delete a page. WARNING: deletion cascades to all child pages. There is no undo via the API.
pagerequiredImport a markdown folder
Import a folder of Markdown files and let the folder structure become the page hierarchy. Each file is { path, content } where path is a relative file path like "guides/setup.md". Folders become parent pages; an index.md or README.md inside a folder supplies that folder page's content; titles come from the first # H1, falling back to the file name. Ideal for an Obsidian vault, a Notion markdown export, or a repo's docs/ folder. Up to 500 files per call. IDEMPOTENT: pages are matched by source path, so re-running an import — or chunking a large vault across several calls — reuses existing pages instead of creating duplicates (response reports created/reused/updated counts). By default existing pages keep their content; set overwrite_existing to re-sync content from the files. Use parent_page to nest the whole import under an existing page. Use bulk_create_pages instead when you want to specify the page tree explicitly. With a space-scoped token, omit "space" to use the token's space.
filesrequiredspaceparent_pageoverwrite_existingBulk create pages
Create up to 500 pages in one atomic call (all succeed or all fail) with an explicitly specified structure (titles, slugs, parent_page_id). To import a folder of Markdown files and derive the hierarchy from file paths, use import_markdown instead. With a space-scoped token, omit "space" to use the token's space.
pagesrequiredspaceShare page
Create a public magic link for a page — anyone with the link can read it without logging in. Returns a web URL and a raw-Markdown URL (the raw one is ideal for other agents).
pagerequiredexpires_in_daysList comments
List the threaded comments on a page, returning each comment's id, content, author and parent. Use this to find a comment's id before update_comment / delete_comment. (get_page with include_comments returns the same thread alongside the page content.)
pagerequiredAdd comment
Post a comment on a page. Set parent_comment_id to reply within an existing thread. The returned 'mentions' array echoes @name tokens parsed from the body — it is informational only; posting a comment does NOT currently notify the mentioned user.
pagerequiredcontentrequiredparent_comment_idUpdate comment
Edit a comment's body and/or mark its thread resolved. Only the comment's author (or an admin) may update it. Provide at least one of content / resolved.
commentrequiredcontentresolvedDelete comment
Permanently delete a comment. Only the comment's author (or an admin) may delete it. There is no undo via the API.
commentrequiredUpload image
Attach an image to a space and get back the Markdown to embed it in a page. Use this to put screenshots and diagrams into the pages you write, so whoever reads the page later — human or agent — can see what you saw. ACCEPTS: PNG, JPEG, GIF, WebP. Max 5 MB. SVG is rejected (script-injection vector). The format is detected from the file's own bytes, not its name. HOW TO SUPPLY THE IMAGE — give exactly one of: • path — absolute path to an image file on this machine. Prefer this: the bytes never pass through the conversation. • data — base64 of the file's bytes (a "data:image/png;base64,..." URI is also accepted). • source_url — a public http(s) URL; the server fetches it. If you can only SEE an image (e.g. a screenshot another tool returned), you cannot re-encode it from what you see — you need the file. Save it to disk, then pass its "path". Counts against the workspace's image storage quota (Free 50 MB, Pro 5 GB).
datapathspacealt_textfilenamesource_url100% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
https://agentdocs.eu/mcp (Streamable HTTP)Authorization: Token <your-token> # or no header at all — OAuth clients authenticate via the built-in flow# Claude Codeclaude mcp add --transport http agentdocs https://agentdocs.eu/mcp \ --header "Authorization: Token <your-token>"claude mcp add agentdocs --env AGENTDOCS_TOKEN=<your-token> -- npx -y agentdocs-mcpcodex mcp add agentdocs --env AGENTDOCS_TOKEN=<your-token> -- npx -y agentdocs-mcp[mcp_servers.agentdocs]command = "npx"args = ["-y", "agentdocs-mcp"][mcp_servers.agentdocs.env]AGENTDOCS_TOKEN = "<your-token>"{ "mcpServers": { "agentdocs": { "command": "npx", "args": ["-y", "agentdocs-mcp"], "env": { "AGENTDOCS_TOKEN": "<your-token>" } } }}{ "servers": { "agentdocs": { "command": "npx", "args": ["-y", "agentdocs-mcp"], "env": { "AGENTDOCS_TOKEN": "<your-token>" } } }}{ "context_servers": { "agentdocs": { "command": "npx", "args": ["-y", "agentdocs-mcp"], "env": { "AGENTDOCS_TOKEN": "<your-token>" } } }}{ "$schema": "https://opencode.ai/config.json", "mcp": { "agentdocs": { "type": "local", "command": ["npx", "-y", "agentdocs-mcp"], "environment": { "AGENTDOCS_TOKEN": "<your-token>" } } }}"command": "cmd","args": ["/c", "npx", "-y", "agentdocs-mcp"]npx -y agentdocs-mcp@latest # or: npm cache clean --forcenpm installnpm run build
# End-to-end smoke tests (hit a real AgentDocs instance with YOUR data):SMOKE_TESTBED_SPACE="workspace-slug/scratch-space-slug" \SMOKE_KNOWN_PAGE="workspace-slug/space-slug/page-slug" \node test/smoke.mjs # account token: all tools
AGENTDOCS_TOKEN=<space-token> node test/smoke-space-token.mjs # space-token mode