lichtblick-docs-mcp
OfficialClick 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., "@lichtblick-docs-mcplook up the PanelExtensionContext type in @lichtblick/suite"
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.
lichtblick-docs-mcp POC
MCP server exposing the Lichtblick documentation and the @lichtblick/suite extension API to AI agents
Tools
Tool | Purpose |
| Full-text search over docs and guides, returns sections with URL anchor |
| Full markdown of a page, by path or URL |
| All pages with path and summary, optionally filtered by section |
| TypeScript declaration and doc comments of a |
| All symbols exported by |
Each page is also exposed as an MCP resource: lichtblick-docs://<path>.
Related MCP server: DocFlow MCP Server
How it works
Docs: on first use, reads
llms.txtfrom the docs site (generated bydocusaurus-plugin-llms), fetches each page's.mdroute (generated bydocusaurus-plugin-copy-page-button) and builds an in-memory MiniSearch index of##/###sections. No build step or release is needed when the docs change.Extension API: parses the TypeScript sources shipped in the pinned
@lichtblick/suitedependency, following the re-exports ofsrc/index.ts.Transport: stdio. The client spawns the process; no port is opened. All tools are read-only.
Quick start
Requires Node.js 22.12+.
npm install
npm run build
npm run inspect # optional: MCP Inspector UIOpen this folder in VS Code; .vscode/mcp.json registers the built server. Start it from MCP: List Servers and use the tools in Copilot Chat agent mode.
Configuration
Variable | Default | Description |
|
| Public docs URL; |
| value of | URL or local Docusaurus |
To test unpublished docs, build the docs repo and point LICHTBLICK_DOCS_SOURCE at its build/ folder.
Development
npm test # vitest
npm run typecheck
npm run dev # tsc --watchKnown limitations
docusaurus-plugin-llmswrites file-based URLs intollms.txtand ignoresslug/idfront matter, so pages that override them (for exampleinitial-information,3d-panel,guides/introduction) are listed but cannot be fetched and are skipped from the index.The extension API only covers what
@lichtblick/suiteexports; it is updated by bumping the dependency.Not published; distribution (
npx), CI and versioning are out of scope for the PoC.
Available Tools
5 toolsdocs_fetchFetch a Lichtblick documentation pageARead-only
Returns the full markdown of a documentation page, by path (from docs_search/docs_list) or URL.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | e.g. 'docs/extensions/extension-api/panel-extension-context' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, so safety is covered. The description goes beyond that by disclosing the return format — the full markdown body, not a summary or snippet — which matters for context budgeting. It still omits size/truncation behavior and whether an invalid path errors gracefully.
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?
A single sentence that front-loads the return type and resource before the input forms. No filler, no restatement of the title.
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?
There is no output schema, so the description carries responsibility for return values and does address them ('full markdown'). For a one-parameter read-only fetch tool that is nearly complete; only edge behavior on an invalid path or oversized document is unaddressed.
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% on the single 'path' parameter, so the baseline is 3. The description adds real value by stating where path values originate (docs_search/docs_list) and by mentioning URL as an accepted form, though that URL option is not reflected in the schema and could confuse an agent.
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 and resource — 'Returns the full markdown of a documentation page' — and specifies the two input forms (path or URL). The parenthetical '(from docs_search/docs_list)' implicitly positions this as the retrieval step after discovery, but it never explicitly contrasts itself with siblings like extension_api_get, which fetches a different resource type.
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 implies the workflow by naming docs_search/docs_list as the source of paths, which tells an agent to discover first and fetch second. However, it gives no explicit when-to-use guidance against extension_api_get/extension_api_list, which cover a distinct lookup surface, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docs_listList Lichtblick documentation pagesBRead-only
Lists the pages of the Lichtblick documentation with their path and summary.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | Only list pages of this section, e.g. "Documentation" or "Guides". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description does add useful behavioral context by naming the returned fields (path and summary), which matters since there is no output schema. However, it says nothing about ordering, pagination, result limits, or scope of the listing.
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?
A single front-loaded sentence with no filler, and it efficiently packs in both the action and the return shape. Nothing could be trimmed without losing information.
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 one-parameter, read-only list tool with no output schema, the essential information (what is listed, what each entry contains) is present. It falls just short of complete because pagination behavior and the relationship to the sibling search/fetch tools remain unstated.
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% for the single optional 'section' parameter, so the schema fully documents it, including examples ("Documentation", "Guides"). The description adds nothing about the filter, so the baseline of 3 applies.
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 ("Lists") and resource ("pages of the Lichtblick documentation") plus the fields returned (path, summary). It is clear what the tool does, but it never contrasts itself with docs_search or docs_fetch, so the agent must infer the listing-vs-searching distinction from the name alone.
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?
No when-to-use or when-not-to-use guidance is given, and the sibling tools docs_search and docs_fetch are not mentioned. The agent can only infer from the word "Lists" that this is the enumeration/browse entry point rather than a query or fetch tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docs_searchSearch Lichtblick documentationARead-only
Full-text search over the Lichtblick documentation and guides. Returns matching sections with their page path, URL and a snippet.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Keywords, e.g. 'subscribe topics custom panel'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description usefully adds the return shape (matching sections with page path, URL, and snippet), which is valuable context given there is no output schema. It does not mention ranking, result-count limits, or that the operation is non-destructive, so the disclosure is good but not rich.
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 tight sentences with zero filler, front-loading the search scope and then the return format. Every clause carries information.
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 simple two-parameter read-only tool, the description covers what it searches and what comes back, which is enough to invoke it correctly. The unmentioned limit/paging behavior and absence of an output schema leave a small gap.
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 50%: query is documented in the schema, but limit has no description there. The description implies keyword semantics but says nothing about limit, paging, or result sizing, so it does not compensate for the half of parameters left undocumented.
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?
Names a specific verb (full-text search) and resource (Lichtblick documentation and guides), and it is clearly distinguishable by intent from docs_list and docs_fetch. It does not explicitly reference the sibling tools to sharpen the boundary, so it stops short of a 5.
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?
No explicit when-to-use guidance or routing to docs_list/docs_fetch; the agent must infer that search is for keyword retrieval versus listing or fetching specific pages. The verb choice makes the intended usage implicitly clear, which fits a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extension_api_getGet a @lichtblick/suite API symbolARead-only
Returns the TypeScript declaration and doc comments of a symbol exported by @lichtblick/suite, e.g. PanelExtensionContext, ExtensionContext, RenderState, SettingsTreeNode.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | Exported symbol name (case-insensitive). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, and there is no output schema, so the description's statement that it returns the TypeScript declaration plus doc comments is genuinely useful behavioral context. However, it says nothing about failure behavior for an unknown or mis-cased symbol, which is the main operational unknown for a lookup tool.
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?
A single front-loaded sentence: the return contract comes first and the illustrative examples follow. No filler, no restatement of the tool name, every clause 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?
With no output schema, the description carries the return-value burden and does so adequately by naming the declaration and doc comments. For a one-parameter read tool with a readOnly hint, the only real gap is the error/lookup-miss behavior.
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% and the schema already documents the single 'symbol' parameter, including case-insensitivity. The description still adds value by enumerating representative valid values (PanelExtensionContext, ExtensionContext, RenderState, SettingsTreeNode), which guides the agent in choosing the right input token.
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 and resource: it returns the TypeScript declaration and doc comments of a symbol exported by @lichtblick/suite. The concrete symbol examples make the scope unambiguous and distinguish it from a listing tool, though it never names the sibling extension_api_list as its complement (symbol discovery).
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?
There is no explicit when-to-use guidance, no prerequisites, and no pointer to alternatives. An agent must infer that extension_api_list is the way to discover symbol names before calling this tool, and nothing states when not to use it (e.g. for general docs, where docs_fetch/docs_search apply).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extension_api_listList @lichtblick/suite API symbolsARead-only
Lists every type, interface and constant exported by @lichtblick/suite, the Lichtblick extension API.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered by structured data. The description adds scope (the complete export surface, not a filtered subset) but says nothing about whether entries carry signatures, whether results are paginated, or how large the payload is — a real usability question for an 'every symbol' list.
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?
A single sentence with the verb and the full resource scope front-loaded, and the package-to-product expansion appended without waste. No filler, no restatement of the tool name.
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 zero-parameter, read-only enumeration tool with no output schema, the description conveys enough to call it correctly: what universe of symbols is returned. It falls slightly short only in not clarifying the shape of the returned list or its relationship to extension_api_get.
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?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. Nothing described implies hidden inputs.
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 (lists) and resource (every type, interface and constant exported by @lichtblick/suite), plus expands the package name into the human-readable 'Lichtblick extension API'. It never names the sibling extension_api_get, so the list-vs-detail distinction is only implied by 'every' versus a singular get.
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?
There is no when-to-use guidance, no statement of prerequisites, and no pointer to extension_api_get for retrieving a single symbol's details. The agent must infer that this is the discovery entry point before drilling into extension_api_get.
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.0.0- First observed
docs_fetch - First observed
docs_list - First observed
docs_search - First observed
extension_api_get - First observed
extension_api_list
TDQS
Scored across 5 tools
Each tool targets a distinct action on a distinct resource: docs_list (browse index), docs_search (full-text query), docs_fetch (retrieve by path/URL), and extension_api_list/get for the API reference. The list/search/fetch boundary is clearly spelled out (fetch takes a path from list/search), leaving no realistic misselection.
All five names follow a strict snake_case namespace_verb pattern (docs_list, docs_search, docs_fetch, extension_api_list, extension_api_get). The docs_ vs extension_api_ prefixes cleanly separate the two sub-areas while staying internally consistent.
Five tools is a well-scoped set for a read-only documentation server, with each tool earning its place at a distinct granularity of access. No redundant or filler tools.
Browsing, searching, and fetching docs plus listing/fetching API symbols covers the core read-only workflows with no dead ends. The only minor gap is that there is no search over the extension API surface -- an agent must list all exported symbols or already know the symbol name to use extension_api_get.
Maintenance
Related MCP Connectors
Versioned documentation registry and semantic search for AI tools and coding assistants.
Serves your design system and coding standards to coding agents, so they stop guessing.
Ingest and search LogsLoom logs from coding agents.
Serve a folder of Markdown notes as an MCP server: hybrid search, reading, and sourced answers.
Related MCP Servers
- AlicenseAqualityDmaintenanceExposes SQLite database query tools and markdown document resources over JSON-RPC 2.0 stdio transport, enabling AI assistants to read and search documents and execute read-only SQL queries.81MIT
- AlicenseNot gradedqualityBmaintenanceServes documentation for Git repositories via MCP, providing tools to search docs, retrieve feature details, WIP status, and full context. Enables LLM agents to access human and LLM-optimized documentation through stdio or SSE transports.MIT

docs-mcpofficial
AlicenseAqualityAmaintenanceLets AI agents search and read a folder of Markdown documentation at query time, exposing heading-level search, whole-page or section retrieval, and page listing as tools and resources over stdio or Streamable HTTP. Can run as a CLI, a hosted endpoint, or a library inside an existing Node or Next.js site.3706 npmMIT- FlicenseNot gradedqualityAmaintenanceEnables AI models to search and retrieve up-to-date technical documentation for popular agent frameworks via web search and page extraction. It supports both stdio and SSE transports.-