Skip to main content
Glama
Geoffrey313

outline-mcp-server

by Geoffrey313

outline-mcp-server

A Model Context Protocol server that exposes an Outline knowledge base to MCP clients — Claude Desktop, Claude.ai, ChatGPT Desktop, and others — so you can search, read, write, and comment on your documents through natural language.

It's a thin, near-stateless proxy over Outline's public REST API: point it at an Outline URL and an API token and it works against any instance, self-hosted or cloud. See docs/design-spec.md for the full design.

Tools

Tool

Does

Mode

search_documents

Full-text search, ranked snippets

read

get_document

Fetch one document with its markdown

read

list_documents

List docs (by collection / parent / author)

read

list_collections

List collections

read

list_comments

List comments on a document/collection

read

whoami

Current user + team

read

create_document

Create a document

write

update_document

Edit a document (replace/append/prepend/patch)

write

create_comment

Comment on a document

write

Set OUTLINE_MCP_READONLY=true to drop all write tools.

Setup

Related MCP server: Outline MCP Server

0. Prerequisites (once)

  1. Get an Outline API token — in Outline, click your avatar → Settings → API Tokens → New token. Copy it (looks like ol_api_…). Each person uses their own token; the server only ever acts with that user's permissions.

  2. Install uv (a fast Python runner that launches the server):

    • macOS / Linux: curl -LsSf https://astral.sh/uv/install.sh | sh

    • Windows (PowerShell): powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

    Then open a new terminal so uvx is on your PATH.

No clone needed for the recommended method below — uvx fetches the code from GitHub for you. Only the checkout-based methods (§3 script, §4 Claude Code) need git clone.


Set your Outline URL + token, then paste the block for your OS. It writes the outline server into Claude Desktop's config file (correct per-OS path handled automatically; merges without clobbering other servers), pointing Claude at the GitHub build via uvx.

macOS / Linux (Terminal):

export OUTLINE_API_URL='https://your-outline.example.com/api'
export OUTLINE_TOKEN='ol_api_PASTE_YOUR_TOKEN'
python3 - <<'PY'
import json, os, platform, shutil
from pathlib import Path

def cfg_path():
    s = platform.system()
    if s == "Darwin":
        return Path.home() / "Library/Application Support/Claude/claude_desktop_config.json"
    if s == "Windows":
        base = os.environ.get("APPDATA") or (Path.home() / "AppData/Roaming")
        return Path(base) / "Claude" / "claude_desktop_config.json"
    base = os.environ.get("XDG_CONFIG_HOME") or (Path.home() / ".config")
    return Path(base) / "Claude" / "claude_desktop_config.json"

uvx = shutil.which("uvx") or os.path.expanduser("~/.local/bin/uvx")
p = cfg_path(); p.parent.mkdir(parents=True, exist_ok=True)
cfg = json.loads(p.read_text() or "{}") if p.exists() else {}
cfg.setdefault("mcpServers", {})["outline"] = {
    "command": uvx,
    "args": ["--from", "git+https://github.com/Geoffrey313/outline-mcp", "outline-mcp-server"],
    "env": {
        "OUTLINE_API_URL": os.environ["OUTLINE_API_URL"],
        "OUTLINE_API_TOKEN": os.environ["OUTLINE_TOKEN"],
    },
}
p.write_text(json.dumps(cfg, indent=2))
print("Wrote", p, "\nuvx:", uvx)
PY

Windows (PowerShell):

$env:OUTLINE_API_URL='https://your-outline.example.com/api'
$env:OUTLINE_TOKEN='ol_api_PASTE_YOUR_TOKEN'
@'
import json, os, platform, shutil
from pathlib import Path

def cfg_path():
    s = platform.system()
    if s == "Darwin":
        return Path.home() / "Library/Application Support/Claude/claude_desktop_config.json"
    if s == "Windows":
        base = os.environ.get("APPDATA") or (Path.home() / "AppData/Roaming")
        return Path(base) / "Claude" / "claude_desktop_config.json"
    base = os.environ.get("XDG_CONFIG_HOME") or (Path.home() / ".config")
    return Path(base) / "Claude" / "claude_desktop_config.json"

uvx = shutil.which("uvx") or "uvx"
p = cfg_path(); p.parent.mkdir(parents=True, exist_ok=True)
cfg = json.loads(p.read_text() or "{}") if p.exists() else {}
cfg.setdefault("mcpServers", {})["outline"] = {
    "command": uvx,
    "args": ["--from", "git+https://github.com/Geoffrey313/outline-mcp", "outline-mcp-server"],
    "env": {
        "OUTLINE_API_URL": os.environ["OUTLINE_API_URL"],
        "OUTLINE_API_TOKEN": os.environ["OUTLINE_TOKEN"],
    },
}
p.write_text(json.dumps(cfg, indent=2))
print("Wrote", p, "\nuvx:", uvx)
'@ | python -

Then fully quit Claude Desktop (macOS ⌘Q / Windows: exit from the tray, not just close the window) and reopen. The Outline tools appear under the tools/🔌 icon; local servers are also listed under Settings → Developer.

First launch can be slow (~15–25s) while uvx downloads the build the first time — Claude may time out and the server won't show. Fix: pre-warm the cache once in your terminal, then restart Claude:

OUTLINE_API_URL='https://your-outline.example.com/api' OUTLINE_TOKEN='ol_api_…' \
  "$(command -v uvx)" --from git+https://github.com/Geoffrey313/outline-mcp outline-mcp-server

Press Ctrl-C once you see the Outline MCP (stdio) line — it's cached now.

To update later: uv cache clean then restart Claude (re-pulls from GitHub).


2. Claude Desktop — interactive script (from a checkout)

If you've cloned the repo, this does the same thing with prompts (and backs up any existing config):

python3 scripts/setup.py      # macOS / Linux
python  scripts\setup.py      # Windows

3. Claude Desktop — manual

Prefer to edit the file yourself? Open the config for your OS and add the outline block below.

OS

Config file

macOS

~/Library/Application Support/Claude/claude_desktop_config.json

Windows

%APPDATA%\Claude\claude_desktop_config.json

Linux

no official Claude Desktop — use Claude Code (§4)

{
  "mcpServers": {
    "outline": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/outline-mcp-server", "outline-mcp-server"],
      "env": {
        "OUTLINE_API_URL": "https://your-outline.example.com/api",
        "OUTLINE_API_TOKEN": "ol_api_…"
      }
    }
  }
}

Replace the path and token, save, then fully quit and reopen Claude Desktop. The Outline tools appear under the tools/search icon. (After publishing to PyPI, this simplifies to "command": "uvx", "args": ["outline-mcp-server"].)


4. Claude Code (any OS, including Linux)

One command from the repo folder:

claude mcp add outline \
  -e OUTLINE_API_URL=https://your-outline.example.com/api \
  -e OUTLINE_API_TOKEN=ol_api_… \
  -- uv run --directory "$(pwd)" outline-mcp-server

5. ChatGPT (Desktop or web) — remote connector

ChatGPT connects to hosted (remote) MCP servers only — it can't launch a local process like Claude Desktop can. So you first deploy the server (see Hosted deployment below), then in ChatGPT:

Settings → Connectors → Add / Create (available on paid plans / developer mode) → point it at your server's URL, e.g. https://outline-mcp.example.com/mcp, and provide your Outline token as the Bearer credential. macOS and Windows desktop apps use the same connector.


6. Remote server from Claude Desktop (via mcp-remote)

To connect Claude Desktop to a hosted instance instead of running it locally, use the mcp-remote bridge (needs Node.js):

{
  "mcpServers": {
    "outline": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://outline-mcp.example.com/mcp",
        "--header", "Authorization:Bearer ${OUTLINE_TOKEN}"
      ],
      "env": { "OUTLINE_TOKEN": "ol_api_…" }
    }
  }
}

(The ${OUTLINE_TOKEN} indirection avoids a header-parsing quirk with spaces in some shells.)


Hosted deployment (Streamable HTTP)

Run one container for a team behind a reverse proxy. Pick exactly one inbound auth strategy:

Strategy

Set

Clients send

Upstream token

Passthrough (per-user)

MCP_ALLOW_OUTLINE_TOKEN_AUTH=true

their own Outline token

forwarded per caller

Gateway (shared)

MCP_AUTH_TOKEN=<secret>

the shared secret

OUTLINE_API_TOKEN

Open (private nets)

MCP_ALLOW_UNAUTHENTICATED=true

nothing

OUTLINE_API_TOKEN

MCP_ALLOWED_HOSTS must be set to the public host(s), e.g. outline-mcp.example.com.

cp .env.example .env   # edit it
docker compose up -d --build   # joins the external `backend` network as `outline-mcp`

Point your reverse proxy (e.g. Nginx Proxy Manager → http://outline-mcp:9000) at it with streaming enabled — Streamable HTTP streams SSE-style over plain HTTP (not a WebSocket):

proxy_buffering off;
proxy_request_buffering off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;

If you front it with Cloudflare on a Tailscale IP, the DNS record must be grey-cloud (DNS-only) — a 100.x address isn't publicly routable, so Cloudflare can't proxy it. Note that a Tailscale-only endpoint is reachable by desktop apps on your tailnet, but not by web connectors (claude.ai / ChatGPT web), which call from outside it.

Configuration

All settings are environment variables — see .env.example for the full list and defaults. Nothing is hardcoded; everything is centralized in src/outline_mcp/config.py.

Security notes

  • Tokens are never written to disk or logged; in passthrough mode they live in a request-scoped context (plus an ephemeral, TTL-bounded session cache for bridges that drop the header).

  • The server fails fast at startup on an ambiguous/unusable auth configuration.

  • An Outline API token carries its user's full permissions — Outline API keys are not scoped. Prefer a dedicated token (and, if possible, a limited-permission service user), and use OUTLINE_MCP_READONLY=true where writes aren't needed.

License

TBD (MIT or Apache-2.0) — chosen before the first published release.

Available Tools

9 tools
create_commentB

Add a comment to a document. Provide markdown text (preferred) or rich-text data.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
textNo
anchor_textNo
document_idYes
anchor_prefixNo
anchor_suffixNo
parent_comment_idNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the burden of behavioral disclosure. It states a mutation action but omits details about permissions, side effects, or reversibility, providing only the basic purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently conveys the tool's purpose and key parameter guidance, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 7 parameters, no output schema, and no annotations, the description covers the essential intent and two key parameters. However, it does not explain anchor_* or parent_comment_id, which are necessary for complete understanding in more complex scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description adds some value: it explains that 'text' is markdown (preferred) and 'data' is rich-text. However, it does not cover the other five parameters (document_id, anchor_*, parent_comment_id), leaving much to the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Add a comment to a document' clearly states the action (add) and resource (comment to a document), distinguishing it from sibling tools like list_comments or create_document.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description only offers parameter usage hints (markdown vs rich-text) but does not address tool selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_documentC

Create a document. Publishing requires a collection or parent document to live in.

ParametersJSON Schema
NameRequiredDescriptionDefault
iconNo
textNo
titleYes
publishNo
template_idNo
collection_idNo
parent_document_idNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavioral traits. It only states 'Create a document' and mentions publishing requirements, but fails to explain what happens when neither collection_id nor parent_document_id is provided (e.g., draft creation, failure). No details on permissions, side effects, or final state are given.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (two sentences), but the first sentence ('Create a document') is largely redundant with the tool name. The second sentence adds value about publishing requirements. While concise, the structure is not front-loaded with the most critical information; an improved version would move key constraints first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (7 parameters, no output schema, no annotations), the description is insufficient. It does not explain return values, required prerequisites beyond publishing, error states, or the effect of omitting optional parameters. The tool's behavior in the common case (draft creation) is entirely absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, meaning the schema provides no parameter documentation. The description must compensate but does not: it only references collection and parent in the context of publishing, and does not explain the purpose or expected values of parameters like icon, text, template_id, or publish. This leaves agents guessing about parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates a document, which is a specific verb+resource. It distinguishes from sibling tools like create_comment because the resource (document vs comment) is explicit. However, it does not elaborate further to differentiate from other document-related tools like update_document or list_documents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by mentioning publishing requirements, but it does not explicitly state when to use this tool versus alternatives like create_comment or update_document. No exclusions or context for non-publish scenarios are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_documentB

Fetch a single document (including its markdown text) by UUID, urlId, or share id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
share_idNo

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It mentions returning markdown text but does not specify whether the operation is read-only, idempotent, or has side effects. It also omits authentication or rate limit details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is mostly clear. However, the phrase 'by UUID, urlId, or share id' could be misinterpreted as three separate parameters, slightly reducing precision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema and annotations, the description should provide more detail about the return structure and error scenarios. It only mentions markdown text, leaving other fields and potential issues unclear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description introduces confusion by mentioning 'urlId' as a parameter, but the schema only includes 'id' and 'share_id'. The description does not clarify the meaning of 'id' (e.g., UUID or urlId) or how 'share_id' relates to the three mentioned identifiers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Fetch', the resource 'single document', and specifies that it includes markdown text. It also lists three identifiers (UUID, urlId, share id), which differentiates it from sibling tools like 'list_documents' and 'search_documents'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a specific identifier, but it does not explicitly state when to use this tool versus alternatives like 'list_documents' or 'search_documents'. No exclusion criteria or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_collectionsC

List collections, optionally filtered by name or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
queryNo
offsetNo
directionNo
status_filterNo

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description must disclose behavior. It only states basic listing/filtering, omitting default sorting, pagination behavior, or response structure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (7 words), which is concise. However, given the number of parameters and lack of schema descriptions, it is under-specified and could benefit from more detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 6 parameters, no output schema, and no annotations, the description is woefully incomplete. It lacks information on pagination, default sort, filtering semantics, and return format, making it insufficient for correct agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description adds little meaning. It mentions filtering by name/status but does not clarify that 'query' is for name or how other parameters (sort, limit, offset, direction) affect results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and resource 'collections', and mentions optional filtering. However, it refers to filtering by 'name' while the schema has a 'query' parameter, creating a slight mismatch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus siblings like list_documents or search_documents. The description does not mention alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_commentsB

List comments, optionally scoped to a document or collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
document_idNo
collection_idNo
include_anchor_textNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It indicates a read-only operation but fails to disclose important behaviors such as pagination (limit/offset), default ordering, or what happens with no scoping. The agent gets minimal behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, which is concise. However, it sacrifices necessary detail for brevity, making it too minimal for the tool's complexity (5 parameters, no annotations).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 parameters, no output schema, and no annotations, the description is far from complete. It provides the main purpose but omits return values, pagination details, and default behavior, leaving significant gaps for agent understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description marginally helps by hinting at the scoping parameters (document_id, collection_id) but completely ignores limit, offset, and include_anchor_text. The agent has no semantic guidance for these parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List comments') and the resource ('comments'), with an optional scoping to a document or collection. This distinguishes it from sibling tools like create_comment (creation) and list_documents (different resource).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that the tool is for listing comments and can be scoped, but it does not explicitly state when to use it over alternatives (e.g., when to use create_comment instead) or when not to use it. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_documentsC

List documents, optionally scoped to a collection, parent, or author.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
offsetNo
user_idNo
directionNo
collection_idNo
status_filterNo
parent_document_idNo

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It only mentions listing and scoping, ignoring pagination (limit/offset), sorting (sort/direction), status filtering, and result structure. This omission leaves agents unaware of common behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence. While concise, it sacrifices necessary information. It could be slightly longer to include pagination or sorting without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters, no annotations, and no output schema, the description is severely underdeveloped. It omits critical context like pagination, sorting, default behavior, and result format, making it inadequate for correct tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must add meaning. It only covers 3 of 8 parameters (collection_id, parent_document_id, user_id) by mentioning 'collection, parent, or author'. Missing sort, limit, offset, direction, status_filter. Does not compensate for low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists documents and mentions optional scoping by collection, parent, or author. This distinguishes it from get_document (single) and search_documents (full-text search), but does not explicitly differentiate from other list tools like list_collections.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus sibling tools like search_documents or get_document. The description implies scoping but does not explain trade-offs or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_documentsC

Full-text search documents by keyword. Returns ranked snippets with their documents.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNo
limitNo
queryYes
offsetNo
user_idNo
directionNo
date_filterNo
document_idNo
collection_idNo
status_filterNo

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description holds the full burden of behavioral disclosure. It mentions 'full-text search' and 'ranked snippets', but does not disclose important traits: pagination defaults, sorting behavior, whether filters are inclusive/exclusive, or any rate limits. The safety profile (read vs. write) is implied but not confirmed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very concise at two sentences with no redundant words. It is front-loaded with the core action. However, given the tool's complexity (10 parameters), a slightly longer description might be justified. Still, it earns a high score for avoiding verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters, no output schema, and no annotations, the description is far from complete. It covers only the basic search and result format, omitting all filtering, sorting, and pagination capabilities. The agent lacks critical context for effective usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It only explains the 'query' parameter (as 'keyword'), ignoring 9 other parameters including sort, limit, offset, direction, date_filter, document_id, collection_id, status_filter, and user_id. The agent cannot infer their purpose or constraints from the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Full-text search documents by keyword' and indicates what it returns ('ranked snippets with their documents'). It effectively distinguishes this search tool from sibling tools like list_documents (listing all) or get_document (single document retrieval).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. No usage context, prerequisites, or recommendations are given. The agent has no information about scenarios where search is preferred over listing or filtering.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_documentC

Update a document. edit_mode=patch requires find_text to locate the edit.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
textNo
titleNo
publishNo
edit_modeNo
find_textNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It does not disclose side effects, permissions, idempotency, or reversibility of updates. The only behavioral detail is the requirement for find_text in patch mode.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences are concise and front-loaded with the core action. No unnecessary words. However, it could be slightly more structured to improve readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters, no output schema, and no annotations, the description is too minimal. It lacks context on return values, error conditions, and behavioral nuances for different edit modes. Incomplete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must add meaning. It only explains the relationship between edit_mode and find_text, but does not clarify the purpose of id (required), text, title, or publish parameters. No semantics added for most parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update a document' which is a specific verb+resource combination. However, it does not differentiate from sibling tools like create_document, which could be clarified. The mention of edit_mode adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions that patch mode requires find_text, but provides no guidance on when to use replace, append, or prepend modes. No comparison with sibling tools or context on when to use update vs create.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

whoamiA

Return the authenticated user and team for the current token.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It clearly states the output (authenticated user and team) and implies no side effects. However, it does not disclose potential rate limits or auth requirements beyond the name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that effectively communicates the tool's purpose. There is no extraneous text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple zero-parameter tool with no output schema, the description fully explains what the tool does. It is complete and sufficient for an agent to understand usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so the schema coverage is 100%. The description adds no additional parameter information, which is acceptable as no parameters exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns the authenticated user and team for the current token. This is a specific verb and resource, and it is distinct from all sibling tools which deal with documents and comments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives. However, the tool serves a unique purpose (authentication info) with no overlapping siblings, so usage is implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv0.1.0
    • First observedcreate_comment
    • First observedcreate_document
    • First observedget_document
    • First observedlist_collections
    • First observedlist_comments
    • First observedlist_documents
    • First observedsearch_documents
    • First observedupdate_document
    • First observedwhoami

TDQS

B3.2/5.0
Disambiguation5/5

Each tool clearly targets a distinct resource and action: document CRUD, comments, collections, search, and user info. No overlap in purpose.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (e.g., create_document, list_comments), with 'whoami' as a minor but acceptable exception.

Tool Count5/5

9 tools cover the core operations for a knowledge base server (documents, comments, collections, search, auth) without being excessive or insufficient.

Completeness2/5

Missing key lifecycle operations: no delete for documents or comments, no collection creation/update/deletion. Notable gaps that could cause agent failures.

Maintenance

ActivityStale
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

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/Geoffrey313/outline-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server