Skip to main content
Glama
mcintalmo
by mcintalmo

godot-docs-mcp

CI Build index

An MCP server that serves the Godot Engine documentation to AI coding agents.

Godot is under-represented in LLM training data relative to Unity and Unreal, so agents routinely hallucinate GDScript APIs, invent node names, and apply Godot 3.x idioms to 4.x projects. This server grounds them in the real docs: full-text search over the manual and tutorials, plus a structured class reference built from the engine's own API metadata.

Built on MCP specification revision 2026-07-28 via the official mcp Python SDK v2, which also serves every earlier protocol revision from the same server.

Status: in development. The server, its tools and resources, the command line, and the weekly workflow that publishes the index all work, and a prebuilt index for Godot 4.7 is published, so sync installs one without a build. Not on PyPI yet — install from git, as below. Packaging as a Claude Code plugin, with skills, is a later phase.

How it works

The documentation is indexed offline into a single SQLite database, so lookups are fast and work without a network connection.

Content

Source

Why

Manual, tutorials, getting started

godotengine/godot-docs .rst

The authored prose

Class reference

godotengine/godot doc/classes/*.xml

Structured and typed — the .rst class pages are generated from these, so the XML gives exact signatures rather than prose

docs.godotengine.org sits behind a Cloudflare challenge that rejects non-browser clients, so the rendered site is not used as a source. Everything comes from GitHub.

Related MCP server: Godot MCP Documentation Server

Getting started

Install the prebuilt index. It is one download of about 8 MB, and it only has to happen once per Godot version.

uvx --from git+https://github.com/mcintalmo/godot-docs-mcp godot-docs-mcp sync
uvx --from git+https://github.com/mcintalmo/godot-docs-mcp godot-docs-mcp status

Then point a client at it. For Claude Code:

claude mcp add godot-docs -- \
  uvx --from git+https://github.com/mcintalmo/godot-docs-mcp godot-docs-mcp

No index published for the version you want, or working on the parsers? Build one from source instead. That needs git and takes about a minute:

uvx --from git+https://github.com/mcintalmo/godot-docs-mcp godot-docs-mcp sync --rebuild

Ask something a model reliably gets wrong — "what's the correct 4.x signature for move_and_slide?" — and the answer should come back from get_godot_class_member as bool move_and_slide(), with no arguments. It took several in Godot 3.x, which is what most training data remembers.

Commands

Command

Purpose

godot-docs-mcp

Serve over stdio. This is what a client launches; serve is the default

godot-docs-mcp sync

Download a prebuilt index. --rebuild builds one from source instead

godot-docs-mcp status

What is indexed, what it was built from, and whether it has fallen behind. --json for a script

godot-docs-mcp search "how do I make a character jump"

Run a query through the same code the tools use, and print the ranking

godot-docs-mcp package

Write the release assets for the installed index. For the build workflow

Every setting is also an environment variable, prefixed GODOT_DOCS_MCP_ — see config.py for the full table.

Staying current

The documentation moves without warning, so two things track it independently.

A weekly workflow checks whether the upstream commits have moved, and if they have, rebuilds the index, queries the whole corpus to confirm it answers, and publishes it as a release asset. godot-docs-mcp sync is how that reaches you.

A running server checks once a day, in the background, whether a newer index has been published. It never downloads one — an index that lags still answers correctly for the version it was built from, and replacing it is your call. What it does instead is say so: in godot://status, and as a one-line notice on search results. If the check cannot run, the answer is "could not check", never "up to date".

Tools

Every tool is read-only, and every response is capped so that one call cannot crowd out the conversation it was meant to inform. A response that was cut says so, and names the call that returns the rest.

Tool

Purpose

search_godot_docs

Ranked search across the manual, tutorials, and class reference. Questions in plain words work

fetch_godot_doc

A page, or a single section of one

get_godot_class

Inheritance chain plus a signature map for a class — no prose, so a 300 KB class entry stays answerable

get_godot_class_member

Exact signature and full description for one member

search_godot_code_examples

GDScript and C# snippets, with the page and heading they came from

Resources

URI

Content

godot://status

Indexed version, counts, and the upstream commits it was built from

godot://index

A map of the corpus: what it holds, how it is addressed, which tool to call

godot://doc/{path}, godot://doc/{path}#{anchor}

A page, or one section of it

godot://class/{name}, godot://class/{name}#{member}

A class, or one member of it

The 515 pages and 1,078 classes are deliberately not enumerated in resources/list. The templates are the URIs every tool already returns, so a search hit can be followed by the host without a further tool call.

Development

Requires uv.

uv sync --dev
uv run pre-commit install

Command

Purpose

uv run pytest

Unit suite (hermetic — no network)

uv run pytest -m slow

Integration tests against a real index

uv run ruff check --fix && uv run ruff format

Lint and format

uv run ty check

Type check

uv run pre-commit run --all-files

Everything the CI lint job runs

See CLAUDE.md for the architecture and contribution conventions.

License

MIT. The Godot documentation itself is licensed CC BY 4.0 by Juan Linietsky, Ariel Manzur and the Godot community; this project redistributes an indexed form of it and does not alter that license.

Available Tools

5 tools
fetch_godot_docA
Read-only

Return one manual or tutorial page as Markdown, or a single section of it. Pass the uri from a search hit exactly as it was given: the #... on the end names the section that matched, and that section is what comes back -- section_title says which. Drop the #... to read the whole page. Pages are cut to fit the response budget: when truncated is set, section_titles lists the titles section accepts, so the rest can be read a section at a time. For a class-reference entry call get_godot_class instead -- this tool serves the prose documentation only.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesA `godot://doc/...` URI, as returned by search_godot_docs.
sectionNoOne title from the page's `section_titles`, or a section anchor. Overrides any `#...` on the uri. Omit to get whatever the uri asks for.

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYesCanonical `godot://doc/...` URI of the page.
hintNoWhat to call next to see what was omitted, or to narrow the request. Empty when nothing was left out.
kindYesWhich part of the documentation this belongs to.
titleYesPage title.
markdownYesThe page or section content, as Markdown.
truncatedNoWhether content was omitted to stay within the budget.
breadcrumbNoTrail of ancestor sections.
section_titleNoThe single section returned, when one was asked for; empty for a whole page.
section_titlesNoEvery section on the page, in order. These are the values `section` accepts, so a truncated page can be re-read one section at a time.

TDQS

A5/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses important behaviors: pages are truncated to fit the response budget, truncated indicates this, and section_titles lists acceptable section values. It also explains the meaning of the #... suffix and how section overrides it, which is valuable context not visible in the schema.

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 dense but every sentence carries necessary operational information. It front-loads the core purpose, then explains uri semantics, truncation handling, and sibling differentiation without wasted words.

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 documentation-fetching tool with a read-only annotation and an output schema, the description covers all needed calling context: source of the uri, section selection, truncation behavior, and the boundary with get_godot_class. Nothing essential is missing.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds significant meaning beyond the schema: it explains how to pass the uri exactly, what the #... suffix does, how to drop it for the whole page, and how section interacts with the uri. This goes well beyond the baseline for high schema coverage.

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 states a specific verb and resource: 'Return one manual or tutorial page as Markdown, or a single section of it.' It also distinguishes itself from get_godot_class by explicitly saying this tool serves prose documentation only, so an agent can tell it apart from siblings.

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

Usage Guidelines5/5

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

It gives explicit instructions on when to use the tool: pass the uri from a search hit exactly, drop the #... to read the whole page, and use section to read truncated content section by section. It also names the alternative get_godot_class for class-reference entries, providing clear routing guidance.

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

get_godot_classA
Read-only

Return a map of one engine class: what it inherits, what it is for, and the signature of every member it declares, without their descriptions. This is the cheap first call for any question about a class -- some class entries run past 300 KB, so the map is what makes them answerable. Choose the member needed from members, then call get_godot_class_member for its full text. Inherited members are not listed; request a class named in inheritance_chain to see those.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoList only members of this kind. Omit for every kind. Worth setting when a full map came back `truncated`.
class_nameYesThe class name, exactly as the engine spells it, e.g. 'Node2D'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
uriYesCanonical `godot://class/...` URI.
hintNoWhat to call next to see what was omitted, or to narrow the request. Empty when nothing was left out.
nameYesClass name.
membersNoDeclared members, in source order. Inherited members are not listed; request a class from `inheritance_chain` to see those.
brief_mdNoOne-line summary.
inheritsNoImmediate base class, empty for roots.
truncatedNoWhether content was omitted to stay within the budget.
tutorialsNo`(title, url)` pairs of linked tutorials.
deprecatedNoWhy this class is deprecated; empty if not.
experimentalNoWhy this class is experimental; empty if not.
description_mdNoFull class description, as Markdown.
inheritance_chainNoBase classes from the immediate parent up to the root.

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses behavior such as returning a map, potential truncation, and omission of inherited members. Combined with readOnlyHint=true annotation, the read-only nature is clear. No contradiction with annotations; description adds valuable context beyond the hints.

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 concise and well-structured, using three sentences to convey purpose, usage guidance, and edge cases (truncation, inherited members). No redundant wording; each sentence earns its place.

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?

Given the output schema exists, the description adequately explains the return type (map) and how to interact with the results (select a member, follow inheritance_chain). It also covers the truncation scenario. The tool is fully understandable within its context.

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 covers all parameters (class_name and include) with clear descriptions. The tool description does not add additional meaning beyond what is already in the schema, so a baseline score of 3 is appropriate given 100% schema coverage.

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 tool returns a map of one engine class, including inheritance, purpose, and member signatures without descriptions. It distinguishes itself as the 'cheap first call' for class questions, differentiating from siblings like get_godot_class_member and search_godot_docs.

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

Usage Guidelines5/5

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

The description explicitly advises when to use this tool (first call for any class question) and when to use alternatives (get_godot_class_member for member details, request inherited classes from inheritance_chain). It also explains the truncation behavior and how to follow up with include parameter.

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

get_godot_class_memberA
Read-only

Return the exact signature and full description of one member of one class. Use this to confirm a signature before writing a call: Godot's API changed substantially between 3.x and 4.x, and a remembered signature is often the 3.x one. Several members can share a name -- Godot overloads constructors and operators -- so members may hold more than one. If the name is wrong, the error names the closest members the class does declare, which is usually where a 3.x name is corrected to its 4.x form.

ParametersJSON Schema
NameRequiredDescriptionDefault
class_nameYesThe class name, exactly as the engine spells it, e.g. 'Node2D'.
member_kindNoRestrict to one kind, for the few names a class uses for members of more than one kind.
member_nameYesThe member name, e.g. 'move_and_slide'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoWhat to call next to see what was omitted, or to narrow the request. Empty when nothing was left out.
membersNoEvery member of that name, in declaration order.
truncatedNoWhether content was omitted to stay within the budget.
class_nameYesThe owning class.
member_nameYesThe member name that was requested.

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description reveals meaningful behavior: overloaded constructors/operators can lead to multiple matches, and an incorrect name returns the closest declared members, often exposing the 3.x-to-4.x rename. This extra context is valuable for interpreting results and handling ambiguous cases.

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?

Three sentences with every sentence earning its place: it states the primary behavior, gives the concrete use-case with version mismatch, and warns about overloads and error behavior. It is concise and front-loaded.

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?

With an output schema present, the return values are already documented. The description adds the only important context missing from structured fields: the version-confliction motivation, overload ambiguity, and the diagnostic behavior when a name is wrong. This makes the description functionally complete for the tool's simple lookup purpose.

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 100%, and each parameter already has a clear description with examples. The tool description adds no parameter-specific semantics beyond what the schema provides, so the baseline 3 is appropriate.

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 opens with the specific verb-object pair 'Return the exact signature and full description of one member of one class,' making the tool's purpose immediately clear. The phrase 'one member of one class' implicitly distinguishes it from class-level lookups like get_godot_class, so an agent can separate it from siblings.

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

Usage Guidelines4/5

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

The description explicitly tells when to use the tool: 'confirm a signature before writing a call,' specifically because Godot's 3.x and 4.x APIs differ. It does not name the alternative tools for 'when not to use it,' but the when-to-use guidance is concrete and actionable.

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

search_godot_code_examplesA
Read-only

Search runnable code examples extracted from the documentation. Each sample carries its language tag, the URI of the page or class it came from, and the heading it appeared under. Use this when working code is wanted; use search_godot_docs when an explanation is wanted.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum results to return. Values above 50 are reduced to 50 rather than rejected. Fewer may come back: the response is also capped by total size.
queryYesWhat to look for, in plain words. A question is fine.
languageNoRestrict to one language tag, e.g. 'gdscript' or 'csharp'. Omit for every language.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoWhat to call next to see what was omitted, or to narrow the request. Empty when nothing was left out.
queryYesThe query as it was actually searched.
samplesNoExamples, best first.
truncatedNoWhether content was omitted to stay within the budget.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate read-only, non-destructive behaviorni. The description adds that results carry language tag, URI, and heading, which gives the agent context about what to expect in results (though the output schema likely also documents this). It doesn't mention any side effects or limitations, but for a search tool that's fine. The annotation covers safety, so the description adds marginal value about result content.

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?

Two sentences, front-loaded with purpose, then usage guidance. Efficient and clear.

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?

The description covers purpose, what results contain, and when to use this tool vs the sibling. With output schema present and full schema coverage, this is complete for the agent to decide and invoke correctly.

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 coverage is 100%, meaning all parameters (limit and query) have descriptions. The description itself doesn't add any parameter-specific semantics beyond what the schema provides)Skip. So baseline 3.

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 opens with a specific verb ('Search') and a precise resource ('runnable code examples extracted from the documentation'), and immediately differentiates from the sibling search tool by stating the intended use case (working code vs. explanations). This makes the tool's purpose unmistakable.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool ('when working code is wanted') and when to use the alternative ('use search_godot_docs when an explanation is wanted'). This clearly guides the agent to choose between siblings.

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

search_godot_docsA
Read-only

Search the Godot documentation -- manual, tutorials, and class reference -- and return ranked matches. Start here whenever the exact class or page is not already known. Natural-language questions work as well as keywords: framing words are stripped before searching, so 'how do I make a character jump' finds the tutorial rather than every page titled 'How do I'. Follow a hit with its own fields: uri is what fetch_godot_doc takes, and a hit from the class reference also carries class_name and member_name, which are what get_godot_class and get_godot_class_member take. At most one hit is returned per page or class; also_matched counts the further matches on that same source that were folded into it.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoRestrict results to one part of the documentation.
limitNoMaximum results to return. Values above 50 are reduced to 50 rather than rejected. Fewer may come back: the response is also capped by total size.
queryYesWhat to look for, in plain words. A question is fine.

Output Schema

ParametersJSON Schema
NameRequiredDescription
hintNoWhat to call next to see what was omitted, or to narrow the request. Empty when nothing was left out.
hitsNoMatches, best first, at most one per page or class.
queryYesThe query as it was actually searched, which may differ from what was asked when question phrasing was stripped out.
noticeNoAn advisory about the index itself -- that a newer one has been published, for instance. It says nothing about the hits, which are as correct for the indexed version as they ever were. Empty when there is nothing to report.
truncatedNoWhether content was omitted to stay within the budget.

TDQS

A4.7/5.0
Behavior4/5

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

ReadOnlyHint already covers the read-only nature. The description adds valuable behavior details: output fields (uri, class_name, member_name) and the handling of limit reductions. Slightly more detail could be given about ranking, but overall transparent.

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?

Every sentence contributes: search scope, usage direction, query example, output fields, and limit caveats are all packed without redundancy. The description is long but efficient.

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?

Given the tool's search nature and relationship to sibling tools, the description fully covers what results look like, how they map to sibling tools, and edge cases (limit reduction). No gaps for correct invocation.

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?

Schema descriptions are thorough for all three parameters, including nuances like plain words for query, restriction by kind, and limit behavior (reduction to 50, size cap). The description reinforces these but does not introduce entirely new meaning beyond the schema.

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?

States a specific verb ('Search') and resource ('Godot documentation'), and explicitly mentions it is for when the exact class or page is not known, distinguishing it from sibling tools that fetch specific docs.

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

Usage Guidelines5/5

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

Provides explicit direction: 'Start here whenever the exact class or page is not already known.' Includes example of natural-language query and notes that framing words are stripped, guiding the agent on appropriate queries.

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.

  1. 5 tool updatesv0.1.0
    • First observedfetch_godot_doc
    • First observedget_godot_class
    • First observedget_godot_class_member
    • First observedsearch_godot_code_examples
    • First observedsearch_godot_docs

TDQS

A4.7/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct retrieval need: prose pages, document/code search, class overviews, and individual member details. Cross-references are explicit, such as fetch_godot_doc directing class-reference lookups to get_godot_class, so an agent is unlikely to confuse them.

Naming Consistency5/5

All tool names use a lowercase snake_case verb_noun pattern: fetch/search/get followed by the object. The singular doc in fetch_godot_doc is meaningful because it fetches one page, while search_godot_docs searches the corpus, and get_godot_class_member extends get_godot_class naturally.

Tool Count5/5

Five tools cover the full Godot docs workflow without bloat: search prose/classes, fetch prose, get class summaries, get member details, and search code examples. Each tool has a distinct role and none is redundant.

Completeness5/5

The surface covers the main documentation workflows: discovering sources via search, retrieving prose pages section-by-section, extracting cheap class overviews, drilling into individual members, and finding runnable examples. Search hits carry the exact fields needed by the retrieval tools, so there are no dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to search and retrieve information from the official Godot game engine documentation. Provides tools to search documentation, get page content, and access detailed class information.
    25
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides AI assistants with direct access to the complete Godot Engine documentation, including classes, tutorials, and features. It enables developers to retrieve and analyze official documentation through natural language interfaces using the Model Context Protocol.
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI assistants with access to the complete Godot Engine documentation, enabling developers to get answers about Godot classes, tutorials, and features directly in their chat interface.
    73
    MIT