live-docs-mcp
Provides documentation lookup and topic search for the Express web framework, including support for multiple documented versions such as 4.x and 5.x.
Click on "Install 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., "@live-docs-mcpsearch Express 5 docs for routing"
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.
live-docs-mcp
A local-only MCP server that gives AI coding agents up-to-date documentation for a specific library or tool while they're implementing a feature — a context7-style capability that runs entirely on your machine, with no hosted backend.
Usage
Add it to your MCP client's server config, the same way you'd add any
other npx-based MCP server:
{
"mcpServers": {
"live-docs": {
"command": "npx",
"args": ["-y", "live-docs-mcp"]
}
}
}Related MCP server: docs-mcp
Tools
search_library({ query }) — find a documented library by name or alias. Returns
{ id, name, description, score, versions? }[]—versionslists the available version keys when a library has more than one documented version.search_docs({ libraryId, topic, version?, limit? }) — search a library's documentation by topic, using the
idfromsearch_library. If the library has multiple versions,versionis required — omitting it (or passing one that doesn't match) returns an error listing the available keys; passing one for a library that isn't versioned is also an error. Returns{ version?, results: { heading, snippet, sourceUrl, score }[] }—versionis present only when the library is versioned.
How it works
Each supported library has a config entry (docsUrl, llmsTxtUrl,
llmsFullTxtUrl, githubUrl, npmPackage, ...). When search_docs
is called, the server fetches documentation for that library in this
order, using the first one that resolves:
llmsFullTxtUrlllmsTxtUrldocsUrl, if it points directly at a markdown fileThe repo's readme from
githubUrl, as a last resort —README.mdby default, or the exact path set ingithubReadmePathif the repo uses a different filename or casing (e.g.Readme.md)
githubBranch is required whenever githubUrl is set — there is
no default-branch guessing of any kind. A config with githubUrl and
no githubBranch fails to load.
Beyond that first "seed" page, the server also resolves and fetches
additional pages, up to a fixed cap: markdown links found within an
llmsTxtUrl/llmsFullTxtUrl seed (restricted to links on the same
origin as the seed), and/or files under a configured githubDocsPath
in the library's GitHub repo. Both sources are best-effort — a failed
extra page is simply skipped and never breaks the request.
Fetched content is cached on disk (in your OS's standard cache
directory) for 24 hours by default, so repeat lookups are instant.
Override the TTL with the LIVE_DOCS_MCP_TTL_MS environment variable
(milliseconds).
Multiple versions
A library with more than one actively-documented version (e.g.
Express 4.x and 5.x) can declare a versions map instead of its own
flat source fields — each version gets its own independent
docsUrl/llmsTxtUrl/llmsFullTxtUrl/githubUrl/githubBranch/githubDocsPath:
{
"id": "widget",
"name": "Widget",
"versions": {
"v1": { "docsUrl": "https://widget.dev/v1/docs.md" },
"v2": { "docsUrl": "https://widget.dev/v2/docs.md" }
}
}versions and the flat source fields are mutually exclusive on one
entry — set one or the other, never both. A versions map must have
at least one entry. There is no default version: search_docs always
requires an explicit version for a versioned library.
Adding your own libraries
Built-in libraries live in this package. To add or override an entry
— for an internal/private library, or to patch a built-in's URLs —
create a JSON file at your OS's standard config directory, e.g. on
Linux: ~/.config/live-docs-mcp/tools.json:
[
{
"id": "my-internal-lib",
"name": "My Internal Lib",
"docsUrl": "https://docs.internal.example.com/my-lib",
"llmsTxtUrl": "https://docs.internal.example.com/my-lib/llms.txt",
"githubUrl": "https://github.com/acme/my-lib",
"githubBranch": "develop",
"githubDocsPath": "docs"
}
]githubBranch— the branch or tag to use for GitHub-based fetches. Required whenevergithubUrlis set — there is no default branch guessing.githubDocsPath— a path within the repo (relative to its root) to search for additional markdown docs, e.g."docs".githubReadmePath— the exact path to the repo's readme file, if it isn'tREADME.md(e.g."Readme.md"). Optional; defaults to"README.md".
An entry whose id matches a built-in overrides that built-in's
fields; any other id is added alongside the built-ins. The merged
result is re-validated as a whole, so combining an override with a
built-in in a way that violates the schema (e.g. adding versions to
a builtin that already has flat fields set, or vice versa) causes the
entire user config file to be rejected — with an error logged to
stderr — falling back to built-ins only, rather than silently applying
a partial or broken merge.
Upgrading note: if your existing override sets githubUrl without
githubBranch, it now fails to load — the old implicit main/master
fallback no longer exists. Add an explicit githubBranch to fix it.
Development
npm install
npm test # run the test suite
npm run build # compile to dist/
npm run dev # run the server directly from source via tsxAvailable Tools
2 toolssearch_docsC
Search a library's documentation by topic.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | Yes | ||
| version | No | Exact version key from search_library's "versions" array (e.g. "5x"). Required if the library has multiple versions; omit it otherwise. | |
| libraryId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It implies a read-only search operation but does not describe return format, pagination behavior, error conditions, or any side effects. This is a minimal disclosure that leaves the agent largely uninformed.
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 a single concise sentence with no filler or redundancy. It is appropriately front-loaded and easy to parse, though it sacrifices informative content for brevity.
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 tool with four parameters, no output schema, and no annotations, the description is too sparse. It does not explain how the search behaves, what result data looks like, or how 'limit' interacts with results. The version parameter's schema description is helpful but addresses only one aspect; overall the description is insufficient for confident 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 description coverage is only 25% (only 'version' has a description), and the tool description itself adds no parameter meaning. It does not clarify 'topic', 'libraryId', or 'limit' semantics. The description fails to compensate for the low schema coverage, leaving three of four parameters effectively 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?
The description states a specific action and resource: 'Search a library's documentation by topic.' It clearly indicates this tool searches inside a library's documentation, which implicitly differentiates it from the sibling tool search_library. However, it does not explicitly name or contrast with the sibling.
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 provides no guidance on when to use this tool versus search_library, nor any exclusions. The only usage hint comes from the schema's version parameter description, which is about a specific parameter, not tool selection. There is no explicit 'when-to-use' or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_libraryC
Find a documented library by name.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the search intent and gives no information about whether the operation is read-only, how matches are ranked, whether pagination applies, or what the response contains.
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 a single, front-loaded sentence with no redundant wording. It is appropriately concise for a simple one-parameter search tool, though it sacrifices some helpful contextual detail for brevity.
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 lookup tool this is minimally viable: an agent can infer the intended call. But with no output schema, no annotation context, and an unaddressed sibling tool, the description leaves gaps around expected return value and when to prefer this over search_docs.
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 input schema provides only a bare string with minLength 1 and no description, so the phrase 'by name' adds meaningful semantics by indicating the query should be a library name. However, it does not clarify whether matching is exact, partial, case-insensitive, or fuzzy, leaving some ambiguity.
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 names a specific verb ('Find') and resource ('documented library') and specifies the lookup mechanism ('by name'). It is distinguishable from the sibling search_docs at the resource level, though 'documented library' is slightly ambiguous about whether it means libraries of documentation or documentation about libraries.
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 guidance about when to use this tool instead of search_docs, nor any contextual hints such as prerequisites or result handling. The sibling tool is not mentioned, leaving the agent to infer the difference from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
2 tool updates
v0.1.0- First observed
search_docs - First observed
search_library
TDQS
search_library targets finding a library by name, while search_docs targets searching within a library's documentation by topic. The two tools have clearly distinct purposes and are complementary rather than overlapping.
Both tool names follow the same search_<noun> snake_case pattern. The naming is predictable and clearly indicates action and target.
Two tools is on the low end for a documentation-focused server, but each tool covers a distinct step in the lookup workflow. It feels minimal yet coherent.
The surface is limited to search operations; there is no way to list libraries, retrieve full documentation content, or navigate doc structure. Agents may be able to find relevant topics but cannot fetch the actual documentation content.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
An MCP server that gives your AI access to the source code and docs of all public github repos
MCP server for agentverse documentation, generated by doc2mcp.
Augments MCP Server - A comprehensive framework documentation provider for Claude Code
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that provides tools to fetch live, version-accurate documentation, changelogs, examples, and method signatures for npm and PyPI packages, preventing AI coding agents from hallucinating stale APIs.21ISC
- AlicenseNot gradedqualityAmaintenanceProvides a local MCP server for searching and retrieving documentation from 22+ open-source projects, enabling AI coding assistants to access up-to-date docs without network dependency.112MIT
- AlicenseNot gradedqualityDmaintenanceA self-hosted MCP server that provides up-to-date documentation for enterprise and development tools directly to AI coding assistants like Claude Code and Cursor.MIT
- FlicenseNot gradedqualityBmaintenanceLocal MCP server that indexes documentation from URLs/files into a vector database, enabling coding agents to search and use up-to-date library and API documentation.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Jubast/live-docs-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server