Koskamo

Moxie Docs MCP

Moxie Docs MCP serves conventions, generated documentation, and doc gaps from GitHub repositories to AI coding agents. It enables agents to query codebase context, check for documentation drift, and access architecture details without re-crawling the repository for every prompt.

Endpoint and access

OAuth sign-in: the first time you connect, your client opens the vendor's own authorization prompt in a browser.

Moxie Docs MCP logo, by jackalope.digitalCommunity listingStreamable HTTPOAuth sign-inEndpoint checked 2026-11-07Published by jackalope.digital
You need:Connects to GitHub through a scoped, least-privilege GitHub App with read-only repository access
MCP endpoint (Streamable HTTP)
https://moxiedocs.com/api/mcp
Vendor documentation

What its tools do

12 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

12 of 12 have a description · 12 of 12 declare behavior hints · 12 of 12 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Query codebase context and conventions for AI agents
  • Check for documentation drift on every merge
  • Access generated architecture documentation and diagrams
  • Verify PR documentation gaps and convention breaches

Source and maintenance

Community listingRegistry 0.3.0
Maintenance checked

Protocol and capabilities

Server
moxie-docs 0.4.0
MCP protocol negotiated in check
2025-06-18
Tools
12 advertised
Resources
1 advertised
Resource templates
Sign-in required
Prompts
3 advertised
Server-advertised capabilities
{
  "tools": {},
  "prompts": {},
  "resources": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Use Moxie Docs BEFORE writing code so any required documentation updates land in the same pull request as the change. Recommended flow: 1. Call `moxie.get_ai_context` to load repo status, verified commands, top conventions, and open gaps. 2. Before editing a file, call `moxie.get_doc_impact` with the file paths you intend to change. It returns the docs/gaps/conventions that apply AND flags paths that are net-new or undocumented (e.g. a new API surface) so you can document them in the same PR. 3. Use `moxie.get_documentation_patterns` to decide where new docs belong, and `moxie.get_conventions` for category-specific rules. 4. After you make the change and BEFORE you commit, call `moxie.review_change` with the new contents of the files you changed (and any deletedPaths). It flags convention breaches, docs your change makes false, undocumented new surface, and broken references. Fix every must-fix finding and re-run until the verdict is clean. 5. When you add or update a doc, call `moxie.propose_doc_update` with the title, markdown, and either a target path or the slug of an existing doc. It returns the exact repository-relative path and content to WRITE INTO YOUR OWN BRANCH and commit, so the docs land in this same PR. Moxie Docs does not open a separate PR. 6. Whenever you edit an existing doc, read the whole file and fix anything else your change makes stale or wrong: correct statements your change contradicts, complete lists or tables it makes incomplete, and drop references to code that no longer exists. A doc you touch should be fully correct when you commit it - leaving a known-outdated section beside a fresh update is not acceptable. 7. Run the verified commands before opening or updating a PR. Tokens are organization-wide, so always pass `repository: "owner/name"` (case-insensitive) on every tool call unless your token is scoped to a single repository. Do not invent documentation: only create or expand human docs when behavior, API, workflow, architecture, or operational contract changed. This guardrail forbids fabricating new docs - it does not excuse leaving stale or contradicted content in a file you are already editing; correcting that is always in scope.

Tools

12 advertised

moxie.get_conventions
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the coding conventions Moxie Docs inferred for the repository. Read-only; no side effects. Returns a Markdown list grouped by category (e.g. testing, structure, docs, review); each convention has a title, summary, confidence score, agent guidance, and the source file paths that evidence it. Use this for the general rules to follow; when you already know the files you're about to edit, prefer moxie.get_doc_impact for conventions scoped to those paths.

moxie.get_conventions input schema
{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "description": "Optional category filter, such as testing, structure, docs, or review."
    },
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    }
  }
}
moxie.get_conventions annotations
{
  "title": "Get repository conventions",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moxie.search_docs
Advertised by the server during the last successful anonymous check.
Advertised read-only

Keyword and semantic search across the connected repository's generated docs, conventions, documentation gaps, AI-context notes, and indexed code. Read-only; no side effects. Returns ranked matches in Markdown grouped into Documentation and Code sections, each with a title, snippet, and source paths. Use for open-ended lookups when you don't know which category holds the answer; when you do, the specific getters (get_conventions, get_doc_gaps, get_documentation_opportunities) are more direct. Omitting query returns recent context instead.

moxie.search_docs input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Maximum matches to return (1-20, default 8)."
    },
    "query": {
      "type": "string",
      "description": "Search phrase or topic. Omit to return recent context for the repository."
    },
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    }
  }
}
moxie.search_docs annotations
{
  "title": "Search docs and code",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moxie.list_docs
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the repository's generated documentation as a browsable table of contents - every doc page, not a query-filtered subset. Read-only; no side effects. Returns Markdown grouped by section, each entry with its title, slug, repository path, and source paths, plus the total count and a pagination cursor so you can tell whether more pages remain (no silent truncation). Use this to see what docs already exist before adding one (so you don't duplicate) or to find the slug to pass to propose_doc_update; when you are hunting for a specific topic, search_docs is more direct.

moxie.list_docs input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "number",
      "description": "Maximum docs to return (1-200, default 50)."
    },
    "offset": {
      "type": "number",
      "description": "Number of docs to skip for pagination (default 0). Use the cursor in the response to fetch the next page."
    },
    "section": {
      "type": "string",
      "description": "Optional section/collection filter (case-insensitive substring), e.g. \"Backend\" or \"Billing\". Omit to list every section."
    },
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    }
  }
}
moxie.list_docs annotations
{
  "title": "List documentation pages",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moxie.get_doc_gaps
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the unresolved documentation gaps Moxie Docs found - areas of the codebase that lack docs. Read-only; no side effects. Returns a Markdown list, each gap with a title, severity, summary, and suggested file paths. This is gaps only; for the full prioritized work queue that also includes drift repairs and PR-template work, use get_documentation_opportunities, and to scope gaps to files you're about to edit use get_doc_impact.

moxie.get_doc_gaps input schema
{
  "type": "object",
  "properties": {
    "severity": {
      "type": "string",
      "description": "Optional severity filter: high, medium, low, or info."
    },
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    }
  }
}
moxie.get_doc_gaps annotations
{
  "title": "List documentation gaps",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moxie.get_documentation_opportunities
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the actionable documentation updates Moxie Docs recommends as a prioritized queue: missing docs, drift repairs, and PR-template work. Read-only; no side effects. Returns a Markdown list, each opportunity with a title, kind (documentation_gap | documentation_drift | pr_template), severity, summary, suggested action, estimated files changed, and source paths. Use this to pick the next doc task; it is the superset of get_doc_gaps (which lists gaps only).

moxie.get_documentation_opportunities input schema
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "description": "Optional kind filter: documentation_gap, documentation_drift, or pr_template."
    },
    "severity": {
      "type": "string",
      "description": "Optional severity filter: high, medium, low, or info."
    },
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    }
  }
}
moxie.get_documentation_opportunities annotations
{
  "title": "List documentation opportunities",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moxie.get_documentation_patterns
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get Moxie Docs' summary of how THIS repository organizes and maintains documentation - where docs live relative to code and how they are kept current. Read-only; no side effects. Returns a Markdown list of pattern entries, each with a title, explanation, and source citations. Use this to decide WHERE a new doc should go before calling propose_doc_update; for the list of WHICH docs need work, use get_documentation_opportunities instead.

moxie.get_documentation_patterns input schema
{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    }
  }
}
moxie.get_documentation_patterns annotations
{
  "title": "Get documentation patterns",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moxie.get_ai_context
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the compact briefing an agent should read before editing this repository: index status, verified commands, agent tips, top conventions, open documentation gaps, and queued documentation opportunities. Read-only; no side effects. Returns a single Markdown document. Call this first at the start of a task; once you know which files you'll change, follow up with get_doc_impact for path-scoped guidance.

moxie.get_ai_context input schema
{
  "type": "object",
  "properties": {
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    }
  }
}
moxie.get_ai_context annotations
{
  "title": "Get pre-edit AI context",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moxie.get_doc_impact
Advertised by the server during the last successful anonymous check.
Advertised read-only

Given the file paths an agent is about to change (and optionally a subset being deleted), return the conventions, documentation gaps, and existing/related docs whose evidence overlaps those paths, plus a net-new/undocumented analysis and any removal candidates. Read-only; no side effects. Returns a Markdown report. Call this BEFORE writing code so doc updates land in the same PR; then use propose_doc_update to write a doc, or propose_doc_removal for an orphaned one.

moxie.get_doc_impact input schema
{
  "type": "object",
  "required": [
    "changedPaths"
  ],
  "properties": {
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    },
    "changedPaths": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Repository-relative file paths the agent intends to modify (e.g., apps/web/src/app/api/billing/webhook/route.ts)."
    },
    "deletedPaths": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Subset of paths that are being DELETED. Moxie Docs flags any doc whose every cited source path is in this list as a removal candidate for moxie.propose_doc_removal."
    }
  }
}
moxie.get_doc_impact annotations
{
  "title": "Analyze documentation impact",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moxie.get_api_context
Advertised by the server during the last successful anonymous check.
Advertised read-only

Given file paths an agent is about to touch, return structured context for any API endpoints they map to: method, path, request/response schema, and known consumers/features. Read-only; no side effects. Call this before editing API route or schema code, alongside get_doc_impact.

moxie.get_api_context input schema
{
  "type": "object",
  "properties": {
    "paths": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Repository-relative file paths to inspect for API endpoint context."
    },
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    }
  }
}
moxie.get_api_context annotations
{
  "title": "Get API endpoint context",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moxie.review_change
Advertised by the server during the last successful anonymous check.
Advertised read-only

Self-review a change you are about to commit BEFORE opening the PR. Pass the proposed new state of each changed file (and any deleted paths); Moxie Docs returns a severity-ranked list of violations to fix: convention breaches, docs your change makes factually false, net-new API/surface added without docs, and doc references broken by deletions. Read-only; no side effects and no writes. Returns a Markdown verdict (clean | warnings | must-fix) with each finding's location, fix, and - for doc issues - the slug to pass to propose_doc_update. Call this as the final step of the edit flow, then fix findings and re-run.

moxie.review_change input schema
{
  "type": "object",
  "required": [
    "changedFiles"
  ],
  "properties": {
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    },
    "changedFiles": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "path"
        ],
        "properties": {
          "path": {
            "type": "string",
            "description": "Repository-relative path, e.g. apps/web/src/app/api/foo/route.ts."
          },
          "patch": {
            "type": "string",
            "description": "Optional unified diff for the file (used if newContent is omitted)."
          },
          "status": {
            "type": "string",
            "description": "Either \"added\" or \"modified\"."
          },
          "newContent": {
            "type": "string",
            "description": "The full new contents of the file after your change."
          }
        }
      },
      "description": "The files your change adds or modifies, in their PROPOSED new state. Provide newContent (the full new file text) for each; you may also/instead provide patch (a unified diff). Max 20 files per call."
    },
    "deletedPaths": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Repository-relative paths your change DELETES, so Moxie Docs can flag docs whose references break."
    }
  }
}
moxie.review_change annotations
{
  "title": "Review a change before the PR",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
moxie.propose_doc_update
Advertised by the server during the last successful anonymous check.

Propose a documentation file to add or update as part of YOUR current change. Records a new proposal each call (not idempotent) and does NOT modify your repository or open a PR - Moxie Docs resolves the target path and returns the path + Markdown for YOU to write into your working branch, so the docs land in the SAME PR as the code. Returns the resolved target path and the content to write. Provide either targetPath or baseSlug.

moxie.propose_doc_update input schema
{
  "type": "object",
  "required": [
    "title",
    "markdown"
  ],
  "properties": {
    "title": {
      "type": "string",
      "description": "Short human title for the documentation update."
    },
    "reason": {
      "type": "string",
      "description": "Why this doc is being added or changed."
    },
    "baseSlug": {
      "type": "string",
      "description": "Slug of an existing generated doc to update instead of supplying targetPath."
    },
    "markdown": {
      "type": "string",
      "description": "The documentation content (Markdown) to write to the target file."
    },
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    },
    "targetPath": {
      "type": "string",
      "description": "Repository-relative path to write the doc to (e.g., docs/billing.md). Omit to resolve from baseSlug."
    },
    "sourcePaths": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Code paths this doc documents, for provenance."
    }
  }
}
moxie.propose_doc_update annotations
{
  "title": "Propose a doc to add or update",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
moxie.propose_doc_removal
Advertised by the server during the last successful anonymous check.

Propose deleting a Moxie Docs-tracked documentation file that your change makes irrelevant, as part of YOUR current change. Moxie Docs validates the path and returns it for you to delete in your working branch; Moxie Docs itself does not delete files or open a PR - the deletion happens in your branch, so it lands in the SAME PR as the code. Returns the resolved path to delete. Provide either slug or targetPath.

moxie.propose_doc_removal input schema
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Slug of the existing generated doc to remove."
    },
    "reason": {
      "type": "string",
      "description": "Why this doc is no longer relevant."
    },
    "repository": {
      "type": "string",
      "description": "The target repository as \"owner/name\" (e.g. \"acme/app\"). Always pass this unless your token is scoped to a single repository. Matching is case-insensitive. If omitted when the token serves multiple repos, the call returns the list of repositories to choose from instead of an answer."
    },
    "targetPath": {
      "type": "string",
      "description": "Repository-relative path of the doc to remove (must be a Moxie Docs-tracked doc). Use instead of slug."
    },
    "removedSourcePaths": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Code paths being deleted that made this doc irrelevant, for provenance."
    }
  }
}
moxie.propose_doc_removal annotations
{
  "title": "Propose a doc removal",
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

3 advertised

document-this-change

Advertised by the server during the last successful anonymous check.

Document the code change you are making so the docs land in the same PR. Runs Moxie Docs' doc-impact check on your changed paths and walks you through proposing the doc updates.

changedPaths
Comma- or space-separated repository-relative paths you are changing. Omit to have the agent gather its own diff first.
deletedPaths
Comma- or space-separated paths your change DELETES, so Moxie Docs can flag docs to remove.
repository
Optional owner/name reference like "acme/app". Needed only when the token serves multiple repos.
fix-stale-docs

Advertised by the server during the last successful anonymous check.

Find this repo's open documentation gaps and drift opportunities and repair them, proposing updates through Moxie Docs.

severity
Optional severity filter: high, medium, low, or info.
repository
Optional owner/name reference like "acme/app". Needed only when the token serves multiple repos.
review-before-finalize

Advertised by the server during the last successful anonymous check.

Self-review the change you just made before opening the PR: run Moxie Docs' guardrail over your diff to catch convention breaches, docs your change makes false, undocumented new surface, and broken references.

repository
Optional owner/name reference like "acme/app". Needed only when the token serves multiple repos.

Resources

1 advertised

Moxie Docs - getting started

Advertised by the server during the last successful anonymous check.

What Moxie Docs is, which tools and resources this MCP server exposes, and how to self-serve a repository token to unlock per-repo context.

Moxie Docs - getting started URI
moxie://getting-started

MIME type: text/markdown

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (1 of 1 answered).

  1. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
3418 ms
95th percentile latency
3418 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 3418 ms · metadata changed · refuses unauthenticated resources/templates/list (HTTP 401)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http moxie-docs-mcp https://moxiedocs.com/api/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add moxie-docs-mcp --url https://moxiedocs.com/api/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable moxie-docs-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "moxie-docs-mcp": {
      "url": "https://moxiedocs.com/api/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "moxie-docs-mcp": {
      "type": "streamableHttp",
      "url": "https://moxiedocs.com/api/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start moxie-docs-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "moxie-docs-mcp": {
      "type": "http",
      "url": "https://moxiedocs.com/api/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http moxie-docs-mcp https://moxiedocs.com/api/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://moxiedocs.com/api/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "moxie-docs-mcp": {
      "serverUrl": "https://moxiedocs.com/api/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Moxie Docs MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.