Skip to main content
Glama
LaserData Docs MCP

LaserData Docs MCP

Official
by laserdata

LaserData Docs MCP

MCP server for answering questions from the LaserData documentation.

It serves two corpora, so an AI assistant answers Laser SDK and LaserData Cloud questions from the current docs rather than from training data:

  • the guides: every page of docs.laserdata.com, read from the site's own llms-full.txt and keyed by site path (laser-sdk/memory, networking/private-link).

  • the Python API: the public surface of the laser_sdk package, read from the laser_sdk.pyi type stub in laserdata/laser-sdk and keyed under python/laser_sdk/.

The guides say how Laser SDK is meant to be used and the API says what is callable, so every result says which corpus it came from.

Search is chunked BM25 with a small vocabulary bridge, and code blocks are first-class content. Related pages are found through the links between pages as well as shared terms.

Adapted from IggyDocMCP, the same server for the Apache Iggy docs.

Corpus sources

The guides are fetched from docs.laserdata.com and cached on disk for seven days. Set LASER_DOCS_FILE to a local copy of llms-full.txt to read that instead, fresh on every call.

The Python stub is a copy in pystub/laser_sdk.pyi, taken from laserdata/laser-sdk at 2a278e76e. Set LASER_PYTHON_STUB to its path. To update it:

curl -sL https://raw.githubusercontent.com/laserdata/laser-sdk/main/foreign/python/laser_sdk.pyi -o pystub/laser_sdk.pyi

Related MCP server: RAG Documentation MCP Server

Install

python3 -m venv .venv
. .venv/bin/activate
pip install -e .

Run

LASER_PYTHON_STUB=pystub/laser_sdk.pyi laser-doc-mcp

This serves over stdio. Set LASER_DOC_MCP_TRANSPORT=streamable-http and PORT to serve over HTTP, as the Docker image does.

Test

pip install -e ".[dev]"
make check

Use the hosted server

The hosted server is at https://laserdata-docs-mcp.fly.dev/mcp, with no sign-in. In Claude Code:

claude mcp add --transport http laserdata-docs https://laserdata-docs-mcp.fly.dev/mcp

Deploy

The image ships the Python stub and fetches the guides at runtime.

fly deploy

Pushes to main also deploy through .github/workflows/fly-deploy.yml, which needs a FLY_API_TOKEN repository secret.

For the OpenAI plugin directory, the server answers the domain-verification challenge at /.well-known/openai-apps-challenge with the token in the OPENAI_APPS_CHALLENGE secret, and returns 404 when it is unset:

fly secrets set OPENAI_APPS_CHALLENGE=<token from the portal>

Tools

  • list_docs: every page, organised by section, with word counts and corpus; source restricts to website or python-api.

  • get_doc: full text of one page by key (e.g. laser-sdk/quickstart, python/laser_sdk/Laser); unambiguous partial keys resolve automatically.

  • search_docs: ranked search across both corpora, returning excerpts with their code blocks, each labelled Guide or Python API.

  • find_examples: code examples by topic and language (Python, TypeScript, Rust, shell).

  • extract_code_snippets: an inventory of code blocks, filtered by language or doc key.

  • get_related_docs: pages related to one key, through links, backlinks, shared section and shared terms.

  • explain_doc_map: the documentation sections and where to start for a new user, SDK developer, operator or AI assistant.

  • refresh_docs: re-fetch the guides, bypassing the cache, and re-read the Python stub. Local stdio use only; the hosted server leaves it out, and its cache refills on each cold start.

Every tool is read-only, and is annotated readOnlyHint: true, destructiveHint: false and openWorldHint: false (refresh_docs is open-world, since it fetches).

Example questions

  • How do I connect to Laser Stack from Python?

  • How do I give an agent memory that survives a restart?

  • What does Laser.connect accept?

  • How do I set up PrivateLink for a deployment?

  • Show me a TypeScript example that stores a key-value pair.

Licence

Apache License 2.0. See LICENSE.

Apache Iggy is a trademark of the Apache Software Foundation.

Available Tools

8 tools
explain_doc_mapA
Read-only

Explain how the LaserData documentation is organised and where to start.

This is a guided map, not a keyword search. Use it when a user asks where docs live, what reading path fits a goal, or which documentation areas look thin from the indexed corpus.

Inputs: goal, audience. Returns: result

extract_code_snippetsB
Read-only

Return an inventory of fenced code snippets from the documentation.

The result includes the doc key, title, heading, language, line number, source URL, and code. Use this for snippet verification and docs CI design.

Inputs: key, language, max_snippets. Returns: result

find_examplesA
Read-only

Find code examples in the LaserData documentation by topic and language.

Use this when a user asks for runnable examples, Laser SDK examples in Python, TypeScript or Rust, agent or session samples, or CLI commands.

Inputs: query, language, max_results. Returns: result

get_docA
Read-only

Retrieve the full text of one LaserData documentation page.

Use list_docs to discover valid keys such as 'laser-sdk/quickstart', 'laser-sdk/memory' or 'python/laser_sdk/Laser'.

Inputs: key (required). Returns: result

list_docsA
Read-only

List every LaserData documentation page, organised by section.

The corpus has two halves. 'website' is the pages of docs.laserdata.com, covering Laser SDK and LaserData Cloud, keyed by site path (laser-sdk/memory). 'python-api' is the Laser SDK Python surface from its type stub, keyed under python/. Pass source to see one alone; the default lists all.

Inputs: source. Returns: result

refresh_docsA
Read-only

Re-fetch the documentation corpus, bypassing the seven-day cache.

When LASER_DOCS_FILE points at a local llms-full.txt this is a no-op, since the local file is always read fresh.

Inputs: no named parameters. Returns: result

search_docsA
Read-only

Search the LaserData documentation for a term or phrase.

Searches the whole corpus: the pages of docs.laserdata.com, covering Laser SDK and LaserData Cloud, and the Laser SDK Python surface. Each result says which corpus it came from, because the guides say how Laser SDK is meant to be used and the API says what is actually callable. Set source to 'website' or 'python-api' to search one alone.

Prefer this over answering Laser SDK questions from memory: the SDK moves quickly and the docs are the current truth.

Inputs: query (required), source, max_results. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

    TDQS

    A4/5.0

    Scored across 8 tools

    Disambiguation4/5

    Most tools have clearly distinct roles: list/get/search/related/map/refresh are all separable, and the doc-key vs keyword distinction is explained. The one soft spot is the trio search_docs, find_examples, and extract_code_snippets, which all surface documentation content including code; descriptions do differentiate them (topic/language search vs. snippet inventory with CI metadata), but an agent could still hesitate between them.

    Naming Consistency5/5

    Every tool follows a uniform snake_case verb_noun pattern (list_docs, get_doc, search_docs, find_examples, extract_code_snippets, get_related_docs, explain_doc_map, refresh_docs). No camelCase mixing or inconsistent verb styles; the naming is predictable throughout.

    Tool Count5/5

    Eight tools is well-scoped for a read-only docs server, covering discovery, retrieval, search, examples, snippets, relatedness, guidance, and cache refresh. Each tool has a defensible purpose and none feels redundant or filler.

    Completeness5/5

    The surface covers the full read-only docs lifecycle: listing the corpus, fetching a page, searching, finding runnable examples, extracting snippets, traversing related pages, orienting via a map, and refreshing the cache. No write operations are expected for a documentation source, so there are no obvious dead ends.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers