godot-docs-mcp
Provides tools for searching and retrieving Godot Engine documentation, including the manual, tutorials, and class reference, with code examples.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@godot-docs-mcpwhat's the correct 4.x signature for move_and_slide?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
godot-docs-mcp
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
syncinstalls 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 |
| The authored prose |
Class reference |
| Structured and typed — the |
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 statusThen 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-mcpNo 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 --rebuildAsk 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 |
| Serve over stdio. This is what a client launches; |
| Download a prebuilt index. |
| What is indexed, what it was built from, and whether it has fallen behind. |
| Run a query through the same code the tools use, and print the ranking |
| 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 |
| Ranked search across the manual, tutorials, and class reference. Questions in plain words work |
| A page, or a single section of one |
| Inheritance chain plus a signature map for a class — no prose, so a 300 KB class entry stays answerable |
| Exact signature and full description for one member |
| GDScript and C# snippets, with the page and heading they came from |
Resources
URI | Content |
| Indexed version, counts, and the upstream commits it was built from |
| A map of the corpus: what it holds, how it is addressed, which tool to call |
| A page, or one section of it |
| 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 installCommand | Purpose |
| Unit suite (hermetic — no network) |
| Integration tests against a real index |
| Lint and format |
| Type check |
| 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 toolsfetch_godot_docARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | A `godot://doc/...` URI, as returned by search_godot_docs. | |
| section | No | One 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
| Name | Required | Description |
|---|---|---|
| uri | Yes | Canonical `godot://doc/...` URI of the page. |
| hint | No | What to call next to see what was omitted, or to narrow the request. Empty when nothing was left out. |
| kind | Yes | Which part of the documentation this belongs to. |
| title | Yes | Page title. |
| markdown | Yes | The page or section content, as Markdown. |
| truncated | No | Whether content was omitted to stay within the budget. |
| breadcrumb | No | Trail of ancestor sections. |
| section_title | No | The single section returned, when one was asked for; empty for a whole page. |
| section_titles | No | Every 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
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.
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.
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.
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.
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.
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_classARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | List only members of this kind. Omit for every kind. Worth setting when a full map came back `truncated`. | |
| class_name | Yes | The class name, exactly as the engine spells it, e.g. 'Node2D'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| uri | Yes | Canonical `godot://class/...` URI. |
| hint | No | What to call next to see what was omitted, or to narrow the request. Empty when nothing was left out. |
| name | Yes | Class name. |
| members | No | Declared members, in source order. Inherited members are not listed; request a class from `inheritance_chain` to see those. |
| brief_md | No | One-line summary. |
| inherits | No | Immediate base class, empty for roots. |
| truncated | No | Whether content was omitted to stay within the budget. |
| tutorials | No | `(title, url)` pairs of linked tutorials. |
| deprecated | No | Why this class is deprecated; empty if not. |
| experimental | No | Why this class is experimental; empty if not. |
| description_md | No | Full class description, as Markdown. |
| inheritance_chain | No | Base classes from the immediate parent up to the root. |
TDQS
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.
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.
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.
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.
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.
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_memberARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| class_name | Yes | The class name, exactly as the engine spells it, e.g. 'Node2D'. | |
| member_kind | No | Restrict to one kind, for the few names a class uses for members of more than one kind. | |
| member_name | Yes | The member name, e.g. 'move_and_slide'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | What to call next to see what was omitted, or to narrow the request. Empty when nothing was left out. |
| members | No | Every member of that name, in declaration order. |
| truncated | No | Whether content was omitted to stay within the budget. |
| class_name | Yes | The owning class. |
| member_name | Yes | The member name that was requested. |
TDQS
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.
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.
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.
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.
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.
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_examplesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum 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. | |
| query | Yes | What to look for, in plain words. A question is fine. | |
| language | No | Restrict to one language tag, e.g. 'gdscript' or 'csharp'. Omit for every language. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | What to call next to see what was omitted, or to narrow the request. Empty when nothing was left out. |
| query | Yes | The query as it was actually searched. |
| samples | No | Examples, best first. |
| truncated | No | Whether content was omitted to stay within the budget. |
TDQS
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.
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.
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.
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.
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.
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_docsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Restrict results to one part of the documentation. | |
| limit | No | Maximum 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. | |
| query | Yes | What to look for, in plain words. A question is fine. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hint | No | What to call next to see what was omitted, or to narrow the request. Empty when nothing was left out. |
| hits | No | Matches, best first, at most one per page or class. |
| query | Yes | The query as it was actually searched, which may differ from what was asked when question phrasing was stripped out. |
| notice | No | An 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. |
| truncated | No | Whether content was omitted to stay within the budget. |
TDQS
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.
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.
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.
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.
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.
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.
5 tool updates
v0.1.0- First observed
fetch_godot_doc - First observed
get_godot_class - First observed
get_godot_class_member - First observed
search_godot_code_examples - First observed
search_godot_docs
TDQS
Scored across 5 tools
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.
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.
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.
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
Related MCP Connectors
Serves your design system and coding standards to coding agents, so they stop guessing.
Versioned documentation registry and semantic search for AI tools and coding assistants.
Provide your AI coding tools with token-efficient access to up-to-date technical documentation for…
The documentation, as a tool your agent can call: 950+ AI-dev guides. Search + fetch tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables 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.25MIT
- AlicenseAqualityDmaintenanceProvides 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.2MIT
- AlicenseNot gradedqualityDmaintenanceProvides 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.73MIT
- FlicenseNot gradedqualityCmaintenanceQuery Godot Engine documentation with full-text search across classes, methods, properties, and inheritance.1-