Skip to main content
Glama
pavelpikta

lampa-mcp-server

lampa-mcp-server

lampa-mcp-server MCP server

lampa-mcp-server MCP server TDQS

CI Release Release

An MCP server for AI-assisted development on the Lampa open-source TV app.

It gives AI agents (Claude, Cursor, etc.) structured, read-only access to the Lampa source tree — so they understand the repo before making changes.

Runs in two modes:

  • Local stdio — Node process spawned by Cursor / Claude Desktop (unchanged workflow)

  • Cloudflare Workers — remote Streamable HTTP MCP at /mcp with GitHub PAT auth and an R2 source snapshot


What it does

The server exposes 16 tools (plus Worker-only whoami) and curated resources (lampa://plugin-guide, lampa://pitfalls, lampa://events, lampa://landmarks, lampa://edit-rules, lampa://api-surface). Tools are read-only: they never write the Lampa repo.

Tool

Role

summarize_repo

Snapshot metadata, tree, scripts, optional module listing

search_code

Content/regex search

find_files

Paths by name, feature, UI, styles, or specs

read_source

File / core module / template bytes

analyze_plugin

One plugin folder (+ load path if name omitted)

list_catalog

Catalogs (API, events, storage, Maker, …)

trace_symbol

Follow one event, component, file, or deprecated API

explain_docs

Plugin docs, patterns, packaging

plan_change

Plan + targets + impact + risks

draft_patch

Suggested diffs (does not write)

scaffold_plugin

New plugin / setting / hook text (does not write)

validate_code

Plugin score, grep, i18n, build hint

guide_cub

CUB APIs as used in Lampa source

resolve_edit_path

Authoritative src/ / plugins/ path

guide_external_api

Third-party content APIs (TMDB, KinoPoisk, Alloha, MDBList, Jackett, TorrServer, Jellyfin)

guide_plugin_catalog

Real plugin-catalog packaging/publishing pipeline (manifest, obfuscation, routing)

Preferred agent loop:

summarize_repo → explain_docs(mode=plugin_docs) | analyze_plugin
  → search_code | list_catalog | trace_symbol
  → resolve_edit_path → plan_change → scaffold_plugin | draft_patch
  → validate_code

Use resolve_edit_path before editing so you change src/ / plugins/ rather than public/ or build/.

Third-party content-provider APIs (TMDB/KinoPoisk/Alloha/MDBList/Jackett/TorrServer/Jellyfin): guide_external_api. Shipping a plugin into the real lampa-plugins catalog: guide_plugin_catalog. Both are static, curated references — they never expose real credentials and never touch this repo's snapshot.


Related MCP server: codemap

Requirements

  • Node.js 20+

  • For local mode: a checkout of lampa-source

  • For Workers mode: a Cloudflare account, R2 bucket, KV namespace, and a GitHub Personal Access Token (read:user)


Local stdio setup

git clone <this-repo>
cd lampa-mcp-server
npm install
npm run build
export LAMPA_REPO_PATH=/path/to/lampa-source
npm start

Claude Desktop

{
  "mcpServers": {
    "lampa-mcp-server": {
      "command": "node",
      "args": ["/absolute/path/to/lampa-mcp-server/dist/index.js"],
      "env": {
        "LAMPA_REPO_PATH": "/absolute/path/to/lampa-source"
      }
    }
  }
}

Cursor

{
  "mcpServers": {
    "lampa-mcp-server": {
      "command": "node",
      "args": ["/absolute/path/to/lampa-mcp-server/dist/index.js"],
      "env": {
        "LAMPA_REPO_PATH": "/absolute/path/to/lampa-source"
      }
    }
  }
}

Cloudflare Workers (remote MCP)

Architecture: createMcpHandler (MCP SDK v2, stateless) + R2 Lampa snapshot + GitHub PAT auth via resolveExternalToken on @cloudflare/workers-oauth-provider.

1. Create Cloudflare resources

npx wrangler r2 bucket create lampa-mcp-source
npx wrangler kv namespace create OAUTH_KV

Put the returned KV namespace id into wrangler.jsonc (kv_namespaces[0].id).

2. Create a GitHub Personal Access Token

Create a classic or fine-grained PAT with at least read:user.

No GitHub OAuth App / GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET is required.

Optional allowlist (comma-separated GitHub logins) in wrangler.jsonc vars or .dev.vars:

ALLOWED_GITHUB_USERS=your-login,coworker

3. Upload a Lampa source snapshot to R2

# clone Lampa if needed
git clone https://github.com/yumata/lampa-source temp/lampa-source

# local Miniflare R2 (for wrangler dev)
npm run snapshot:upload:local

# production R2
npm run snapshot:upload

Objects land under lampa/manifest.json, lampa/bundle.json (all source text), and lampa/indexes/*.json.

4. Deploy

npm run types:worker
npm run deploy

MCP endpoint: https://lampa-mcp-server.<account>.workers.dev/mcp

5. Connect a remote MCP client

Pass the GitHub PAT as a Bearer token. Cursor example:

{
  "mcpServers": {
    "lampa": {
      "url": "https://lampa-mcp-server.<account>.workers.dev/mcp",
      "headers": {
        "Authorization": "Bearer ghp_YOUR_GITHUB_PAT"
      }
    }
  }
}

Or via mcp-remote:

{
  "mcpServers": {
    "lampa": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://lampa-mcp-server.<account>.workers.dev/mcp",
        "--header",
        "Authorization: Bearer ghp_YOUR_GITHUB_PAT"
      ]
    }
  }
}

Prefer storing the PAT in env / secret storage rather than committing it to mcp.json.

Local Worker development

npm run snapshot:upload:local
npm run dev:worker

Then point the MCP inspector / client at http://localhost:8787/mcp with Authorization: Bearer <pat>.


summarize_repo → explain_docs(mode=plugin_docs) | analyze_plugin
    → search_code | list_catalog | trace_symbol
    → resolve_edit_path → plan_change → scaffold_plugin | draft_patch
    → validate_code

Plugin authoring must follow official docs/en (Listener app:ready, SettingsApi, double-load guard). Do not emit $(document).on('appready') or Lampa.Settings.add.

For CUB account/sync work:

guide_cub(topic=auth) → guide_cub(topic=catalog) → guide_cub(topic=sync)
    → guide_cub(topic=models) → guide_cub(topic=endpoint)

Breaking change (v1.x → verb_noun tools)

Aliases, thin wrappers, and v1.7 noun-first names were removed so the catalog stays in the 3–15 range Glama scores. Call the replacement instead:

Removed

Use instead

snapshot_info, list_scripts, list_modules

summarize_repo

read_file, read_file_segment, get_core_module, list_templates, extract_template_html

read_source

find_feature, find_ui_component, find_styles_for_module, list_related_tests

find_files (mode=…)

plan_feature_change, impact_analysis, suggest_edit_targets, risk_scan

plan_change

scaffold_plugin_integration, generate_plugin_boilerplate, add_setting, insert_hook

scaffold_plugin

validate_plugin, run_grep_checks, i18n_check, find_translation_keys, translation_coverage, run_build_hint

validate_code

plugin_docs, doc_lookup, explain_lampa_pattern, platform_packaging_guide

explain_docs

lampa_api_surface, list_all_events, get_storage_schema, get_network_map, find_settings, Maker/socket/flags/…

list_catalog (topic=…)

trace_event, component_lifecycle, module_dependency_map, find_api_calls, upgrade_migration_checker

trace_symbol

cub_api_catalog, cub_endpoint_detail, cub_auth_guide, cub_data_models, cub_sync_guide, cub_timeline_hash_guide

guide_cub

plugin_load_path

analyze_plugin (omit plugin)

repo_overview

summarize_repo

plugin_deep_dive

analyze_plugin

map_lampa

list_catalog

trace_lampa

trace_symbol

explain_lampa

explain_docs

cub_guide

guide_cub


Project structure

src/
├── index.ts                 # Local stdio entry
├── worker.ts                # Cloudflare Worker + PAT auth entry
├── server.ts                # Shared createLampaServer factory
├── config.ts                # Local Config (NodeRepoFs)
├── auth/github-handler.ts   # Public pages + GitHub PAT validation
├── fs/                      # RepoFs: types, Node, R2, paths
├── utils/                   # Async analysis helpers
├── tools/                   # MCP tools
└── resources/               # MCP resources
scripts/
└── upload-snapshot.mjs      # R2 snapshot + index uploader
wrangler.jsonc

Development

npm run build                # wrangler types + tsc → dist/
npm run dev                  # build, then run stdio server
npm start                    # run compiled stdio server
npm run typecheck            # wrangler types + tsc --noEmit
npm run lint
npm run format
npm run types:worker         # regenerate worker-configuration.d.ts (gitignored)
npm run dev:worker           # wrangler dev
npm run deploy               # wrangler deploy
npm run snapshot:upload:local
npm run snapshot:upload

Dependencies (what / why)

Package

Role

@modelcontextprotocol/server

MCP SDK (stdio + shared server factory)

agents

Workers MCP handler (createMcpHandler)

@cloudflare/workers-oauth-provider

Worker auth wrapper (PAT via resolveExternalToken)

hono

Public HTML routes (/, /authorize)

zod

Tool input schemas

typescript

TypeScript 6 compiler + types for typescript-eslint

wrangler

Deploy, wrangler types, local Worker dev

eslint + typescript-eslint + prettier

Lint / format

Runtime deps ship with both the stdio CLI and the Worker. Dev deps are local-only.


License

MIT

Available Tools

16 tools
analyze_pluginAnalyze one Lampa plugin folderA
Read-onlyIdempotent

Single-call report for one plugins/<name> folder: files, Lampa.* usage, Listener follow/send, settings, CSS, and an entry preview truncated to ~30 lines, plus how Lampa loads plugins (src/core/plugins.js). Unlike list_catalog this is scoped to one plugin, unlike trace_symbol it does not follow a single event/file across the repo, unlike validate_code it does not score conventions. Entry file is chosen as main.js, else <plugin>.js, else the first .js file found — plugin itself must be just the case-sensitive directory name (e.g. online, iptv, never a plugins/ prefix or nested path), not a manifest id; omit it for load-path-only output; an unknown folder errors and lists available folders instead of guessing.

NameRequiredDescriptionDefault
pluginNoCase-sensitive plugins/ directory name (not a manifest id), e.g. 'online', 'iptv', 'collections'. Omit for load-path only.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety bar is low; the description still adds real behavior: entry-file resolution precedence (main.js → <plugin>.js → first .js), output truncation to ~30 lines, and that an unknown folder errors and lists available folders rather than guessing. The only gap is no note on output size/pagination beyond the truncation hint, which the output schema largely covers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the deliverable, then the sibling contrasts, then the parameter rules and error behavior — a sensible priority order with zero filler sentences. It is dense and the third clause chains three 'unlike' comparisons plus the entry-resolution and path-validation rules into one long passage, which costs some scannability.

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 single-parameter read tool with full annotation coverage and an output schema, this is complete: report contents, path validation rules, entry-file fallback order, truncation, and error behavior are all stated. An agent has everything needed to call it correctly on the first attempt.

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 coverage is 100% and the schema description already states case-sensitivity, the 'not a manifest id' caveat, and the omit behavior, so much of the description restates it. It nevertheless adds a constraint absent from the schema ('never a plugins/ prefix or nested path') and ties the parameter to the entry-file selection logic, which is genuine added meaning.

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?

Names a specific verb+resource ('Single-call report for one plugins/<name> folder') and enumerates exactly what the report contains: files, Lampa.* usage, Listener follow/send, settings, CSS, and an entry preview. It also explicitly differentiates itself from three siblings (list_catalog, trace_symbol, validate_code), so the agent can pick it without opening any schema.

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?

Gives explicit routing rules via 'unlike list_catalog... unlike trace_symbol... unlike validate_code', which tells the agent both when this tool wins and which alternative to use instead. It also states the omit-parameter case ('omit it for load-path-only output') and the failure mode, leaving nothing to inference.

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

draft_patchDraft a Lampa unified diffA
Read-onlyIdempotent

Returns TODO unified diffs as text only — does not write the repository. Best with plan_context pasted from plan_change; unlike plan_change, this invents concrete diff hunks; unlike scaffold_plugin, it patches existing files rather than emitting new-plugin boilerplate. target_files, when given, fully overrides inference (the two are never combined) and is capped at the first 5 entries for diff generation even if more are passed (the 'Target files' summary section still lists up to 6); without it, up to 5 files are inferred from request alone, which is weaker than passing plan_context's target list explicitly. Missing files get a 'File not found' note instead of aborting the whole call; the @@ hunks are suggested, not guaranteed to apply — always re-check against read_source before applying by hand.

NameRequiredDescriptionDefault
requestYesThe change to implement.
plan_contextNoOptional paste of plan_change output. Recommended; the tool still runs without it.
target_filesNoRepo-relative files to patch. If omitted, up to 5 files are inferred from request (weaker than plan_context).

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive behavior, but the description adds critical operational details: output is text-only, `target_files` fully overrides inference and is never combined with it, inference is capped at 5 files even if more are passed, missing files produce a note rather than aborting, and hunks are suggestions that should be re-checked before applying.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with the key constraint ('text only — does not write the repository') and then layers useful caveats. Most sentences carry operational value, though the parenthetical cap details and the 'TODO' phrasing are slightly awkward and could be tightened.

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?

An output schema exists, so return format explanation is unnecessary, and the description covers the remaining decision-critical behavior: non-writing nature, precedence of `target_files`, inference limits, missing-file handling, and non-guaranteed patch applicability. Nothing substantial is missing 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 coverage is 100%, so the schema already documents each parameter. The description still adds meaningful semantics beyond the schema: `target_files` fully overrides inference rather than supplementing it, is capped at the first 5 entries for diff generation even if more are passed, and the summary section lists up to 6. It also explicitly characterizes inference without `plan_context` as weaker.

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 and resource ('Returns ... unified diffs as text only') and immediately clarifies it does not write the repository. It explicitly distinguishes itself from plan_change and scaffold_plugin, so an agent can select it without opening sibling schemas.

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?

Names alternatives (`plan_change`, `scaffold_plugin`) and explains the selection conditions: plan_change produces plans, scaffold_plugin emits new-plugin boilerplate, and draft_patch patches existing files with concrete hunks. It also recommends pasting `plan_context` from `plan_change` and explains when `target_files` should be supplied.

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

explain_docsExplain Lampa docs, patterns, or packagingA
Read-onlyIdempotent

Read written Lampa guides: official plugin chapters (mode=plugin_docs), a core development pattern with live snippets (mode=pattern), or gulp/npm packaging targets (mode=packaging). Not a live API catalog (list_catalog) and not grep (search_code). Example: chapter=pitfalls vs query='SettingsApi' when chapter is omitted; omit both for the TOC; lang is en (default) or ru; pattern requires the pattern enum; unknown chapter → error listing known ids. Snapshot-only; packaging reads gulpfile.js / package scripts — it does not execute gulp or npm.

NameRequiredDescriptionDefault
langNoFor plugin_docs: docs language. Default en.
modeYesplugin_docs=docs/en|ru; pattern=guide+live examples; packaging=gulp/npm targets.
queryNoFor plugin_docs: search headings/body when chapter is omitted. Also used as fallback topic.
chapterNoFor plugin_docs: chapter id or alias (pitfalls, settings, player, 01–13).
patternNoFor mode=pattern: which development pattern to explain.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark the tool read-only and idempotent, and the description adds valuable non-obvious behavior: snapshot-only, packaging reads configuration but does not execute gulp/npm, and unknown chapter returns an error listing known ids. This meaningfully extends the structured 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?

Three dense sentences with the core resource and modes front-loaded before details. Every clause earns its place, and there is no filler or redundant restatement of the schema.

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 multi-mode tool with five parameters, three enums, and an output schema, this description is complete: it covers mode selection, parameter interplay, error behavior, side-effect boundaries, and sibling differentiation. An agent has what it needs to invoke the tool correctly.

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 interaction semantics not present in the schema: chapter vs query when chapter is omitted, omitting both gives the TOC, lang is en or ru, and pattern requires the pattern enum. This materially improves correct invocation.

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 and resource ('Read written Lampa guides') and enumerates three distinct modes, immediately differentiating itself from list_catalog and search_code. An agent can tell exactly what this tool covers without opening the schema.

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?

Gives explicit when-to-use guidance per mode and names alternatives not to use: 'Not a live API catalog (list_catalog) and not grep (search_code)'. It also explains chapter/query fallback behavior, the TOC case, lang default, and the pattern requirement, so selection and invocation conditions are concrete.

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

find_filesFind Lampa files by name or featureA
Read-onlyIdempotent

Locate repo-relative paths by filename, Lampa feature, UI component, stylesheet, or spec — a path finder, not content grep. Unlike search_code, this matches names/paths (except mode=ui/styles, which also attach up to 20/15 content hits); unlike read_source, it does not return file bytes. Example: mode=feature query='player' uses the built-in feature map; mode=name query='full' ext='.js' filters by extension. ext is honored only when mode=name; passing it with mode=feature/ui/styles/tests is silently ignored rather than erroring, so those modes always return every matching extension. Empty matches → list, not an error.

NameRequiredDescriptionDefault
extNoFor mode=name only: extension filter, e.g. '.js' or '.scss'. Ignored otherwise.
modeNoname (default)=filename substring; feature=built-in Lampa feature map + filename; ui=templates/components (+ up to 20 content hits); styles=css/scss (+ up to 15 content hits); tests=spec files.
queryYesFilename substring (mode=name), feature name (mode=feature, e.g. player/catalog/iptv), UI component, style module, or spec keyword.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive and closed-world, so the bar is lower, yet the description still adds real behavioral detail: `mode=ui`/`styles` attach up to 20/15 content hits, `ext` is silently ignored rather than erroring in non-name modes, and empty matches return an empty list rather than an error. These are non-obvious behaviors an agent would otherwise discover by failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and sibling contrast, then examples, then edge cases; every sentence contributes. It loses a point for mild overlap with the schema, which already states that `ext` applies only to `mode=name`.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation, and the description covers mode semantics and failure behavior. Minor gap: it does not say whether `mode=name` results are capped or ordered the way `ui`/`styles` content hits are, so the agent cannot predict result volume in the default mode.

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 coverage is 100%, so a 3 is the baseline, but the description goes beyond the schema by giving concrete `query` examples per mode, noting the built-in feature map, and explaining the silent-ignore semantics of `ext` (the schema says 'ignored otherwise' but not that it will not error). That is meaningful added semantics rather than restatement.

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 and resource ('Locate repo-relative paths') plus the dimensions it searches (filename, feature, UI component, stylesheet, spec) and immediately frames itself as 'a path finder, not content grep.' It explicitly contrasts with the siblings `search_code` and `read_source`, so an agent can discriminate without opening a schema.

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?

Names alternatives and the conditions that select them: use `search_code` for content grep, `read_source` for file bytes, this tool for name/path lookup. It also supplies per-mode usage examples (`mode=feature query='player'`, `mode=name query='full' ext='.js'`), leaving little to inference.

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

guide_cubGuide to CUB cloud APIs in LampaA
Read-onlyIdempotent

Document how Lampa talks to CUB from source — this makes no network calls of its own (pure snapshot read, no auth needed to call this tool), and is not a substitute for cub.rip/developer. Returns markdown text (see output schema), never raw JSON. Unlike list_catalog topic=mirrors/socket, this is CUB-specific. topic=catalog lists REST paths (category/search filter the catalog only, no effect on other topics); endpoint requires path (e.g. bookmarks/dump) and ignores category/search; auth reads auth_focus only (device/add, headers, Permit, Premium, mirrors); models reads model only (bookmark/timeline/favorite shapes); sync takes no parameters and maps dump/changelog/WebSocket; timeline_hash reads example only and explains Utils.hash. Passing any parameter that does not apply to the chosen topic is silently ignored, never an error.

NameRequiredDescriptionDefault
pathNoFor topic=endpoint: path such as 'bookmarks/dump' or 'device/add'.
modelNoFor topic=models: which schema. Default all.
topicYescatalog=endpoint table; endpoint=one path; auth=login/headers; models=schemas; sync=dump/changelog; timeline_hash=hash algorithm.
searchNoFor topic=catalog: filter by path substring.
exampleNoFor topic=timeline_hash: worked example.
categoryNoFor topic=catalog: filter by API category. Default all.
auth_focusNoFor topic=auth: focus area. Default overview.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, but the description adds material behavior the annotations cannot express: no network calls of its own, pure snapshot read, no auth required to invoke, and markdown rather than raw JSON output. These are real operational facts an agent needs and none contradict 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?

One dense but well-ordered paragraph: identity/scope first, then the non-substitute warning, then a topic-by-topic parameter map. Every clause carries routing or semantics information; nothing is filler.

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 7 parameters, 5 enums, a required topic, and an output schema already in place, the description covers the remaining risk area — which params apply to which topic and what happens when they don't — and confirms the return format. Nothing material is left to inference.

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?

Schema coverage is 100%, so the baseline would be 3, but the description goes further by defining the cross-parameter applicability matrix per topic (e.g. `endpoint` requires `path` and ignores `category`/`search`), which the flat schema cannot express. Example values like `bookmarks/dump` reinforce the format.

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?

Opens with a specific verb+resource ('Document how Lampa talks to CUB from source') and immediately scopes what it is not (a substitute for cub.rip/developer). It also distinguishes itself from the sibling tool `list_catalog` topic=mirrors/socket, so an agent can route correctly without opening schemas.

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 enumerates each `topic` value and states exactly which parameters it honors (catalog→category/search, endpoint→path, auth→auth_focus, models→model, sync→none, timeline_hash→example). It even states the failure-tolerance rule ('silently ignored, never an error'), which is explicit when/when-not guidance.

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

guide_external_apiGuide to third-party content-provider APIs used by Lampa pluginsA
Read-onlyIdempotent

Document the real-world content/ratings/torrent-indexer/media-server APIs that Lampa plugins call — TMDB, KinoPoisk (PoiskKino + Unofficial), Alloha, MDBList, Jackett/Prowlarr/JacRed, TorrServer, Jellyfin, TheIntroDB, and the CORS-proxy pattern that fronts them. This is curated from the separate lampa-plugins repository, not the Lampa app source — unlike guide_cub (Lampa→CUB backend only) and unlike list_catalog (Lampa's own API/event/storage surface).\nNever returns secret values (API keys, tokens, passwords) — only provider identity, auth mechanism, and the Lampa.Storage key names a plugin reads credentials from.\ntopic=providers lists all providers (search filters by id/name/category/description); provider_detail requires provider; proxy_pattern takes no parameters and explains the shared Worker-proxy design once for all providers.

NameRequiredDescriptionDefault
topicYesproviders=list/search all providers; provider_detail=one provider's auth/storage/usage; proxy_pattern=shared CORS/credential-hiding Worker design.
searchNoFor topic=providers only: filter by id, name, category, or description substring.
providerNoRequired for topic=provider_detail, e.g. 'tmdb', 'kinopoisk_unofficial', 'alloha', 'mdblist', 'jackett', 'torrserver'. Ignored otherwise.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds meaningful behavioral context beyond that: it is curated from a separate repository, not the Lampa app source, and it never returns API keys/tokens/passwords, only identity, auth mechanism, and storage key names. No contradiction with annotations.

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 earns its place: scope, exclusions, security boundary, and parameter routing. It is front-loaded with the core purpose and avoids filler or repetition of schema content.

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 annotations cover safety, the output schema exists, and the schema covers all parameters, the description provides complete context for selecting and invoking the tool. It also notes the provenance and security boundary, which are important contextual facts an agent would otherwise not know.

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 coverage is 100%, so the baseline is 3. The description adds value by explaining the operational meaning of each topic value: providers lists/searches, provider_detail requires provider, and proxy_pattern takes no parameters and explains the shared design once. This goes slightly beyond the schema's property descriptions.

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 uses a specific verb ('Document') with a clearly bounded resource: third-party content/ratings/torrent-indexer/media-server APIs used by Lampa plugins. It explicitly enumerates the covered providers and distinguishes itself from guide_cub and list_catalog, so an agent can disambiguate it without opening schemas.

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 names sibling tools it is unlike (guide_cub for Lampa→CUB only, list_catalog for Lampa's own surface) and provides routing rules for the three topic values. It also states a hard constraint: never return secret values. This gives clear when-to-use and when-not-to-use guidance.

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

guide_plugin_catalogGuide to publishing plugins into the real Lampa plugin catalogA
Read-onlyIdempotent

Document how the separate lampa-plugins repository turns plugin source files into the live catalog agents install into Lampa: the extension.json/plugin-manifest.json schema, the obfuscation presets, Cloudflare Pages Functions routing, and a step-by-step publishing checklist. Curated from that repo's scripts/ and functions/, not from the Lampa app source — unlike validate_code (lints one plugin's code against Lampa conventions) and scaffold_plugin (emits new-plugin boilerplate text), this tool covers packaging and distribution once the plugin already works.\nEach topic takes no other parameters and returns a fixed reference document — it does not read this repo's snapshot and never writes files.

NameRequiredDescriptionDefault
topicYesmanifest=extension.json/plugin-manifest.json schema; obfuscation=javascript-obfuscator presets; routing=Cloudflare Pages _routes.json/_headers; functions_api=the three Pages Functions endpoints; publishing_checklist=ordered steps to ship a new plugin.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds meaningful behavioral context: it returns a fixed reference document, does not read this repo's snapshot, and never writes files. It also discloses that content is curated from the lampa-plugins repo rather than the Lampa app source, which is not inferable from annotations.

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 two dense sentences, front-loaded with the core purpose, then source provenance, sibling differentiation, and side-effect clarification. Every sentence earns its place with no filler or redundant restatement.

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 small parameter surface, full schema coverage, and provided annotations, the description is complete: it explains scope, source, behavior, constraints, and sibling boundaries. An agent can confidently decide to invoke this tool and with which topic.

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?

The schema covers the single topic parameter fully (100%) with an enum and per-value descriptions, so the baseline is 3. The description reinforces that each topic returns a fixed reference document but does not add deeper meaning beyond what the schema already provides.

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 action ('Document how the separate lampa-plugins repository turns plugin source files into the live catalog'), names the covered topics, and explicitly contrasts itself with validate_code and scaffold_plugin. This makes the tool's purpose unmistakable and differentiates 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 Guidelines5/5

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

It explicitly says this tool covers packaging and distribution 'once the plugin already works' and names the sibling tools it is not (validate_code, scaffold_plugin). This gives clear when-to-use and when-not-to-use guidance, with alternatives called out.

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

list_catalogCatalog Lampa APIs and indexesA
Read-onlyIdempotent

Dump one static catalog from the Lampa snapshot per call. Returns markdown text, not JSON, with no performance cost beyond one tree walk. Not a query (search_code), not a single-symbol walk (trace_symbol), not written docs (explain_docs), and not a live CUB client (guide_cub). scope applies only to api_surface/events/storage (default all); detail=true only affects events; query is a plain substring filter (module name, event name, storage key, component name, flag keyword, or network folder) within the chosen topic — never a repo-wide search. Example: topic=events query='player' detail=true. Empty catalog → markdown, not an error; on R2, full-tree events/storage need a prebuilt index — pass query or a narrower topic (e.g. maker, socket, flags, content_rows, favorites, mirrors) if the index is missing.

NameRequiredDescriptionDefault
queryNoFilter the chosen catalog only (not a repo-wide search): API module, event name, storage key, component name, flag keyword, or folder (for network).
scopeNoFor api_surface, events, storage: limit the tree. Default all.
topicYesWhich catalog: api_surface | events | storage | network | settings | providers | maker | socket | activity | flags | content_rows | favorites | mirrors.
detailNoFor topic=events: include per-file listener/emitter lists. Default false.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already establish readOnly, idempotent, non-destructive, and closed-world behavior, but the description adds important context beyond them. It discloses that output is markdown rather than JSON, that cost is one tree walk, that an empty catalog is not an error, and that full-tree events/storage on R2 may require a prebuilt index.

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 front-loads purpose, then covers sibling alternatives, parameter constraints, an example, and edge-case behavior. It is dense but appropriately sized for a catalog tool with multiple topics and operational caveats.

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?

An output schema exists, annotations cover safety, and schema descriptions are complete. The description still adds useful index-missing guidance and clarifies empty-result behavior, so an agent has enough information to invoke it correctly.

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 description coverage is 100%, so the baseline is 3. The description adds that query is a plain substring filter and gives an example combining topic, query, and detail, but most scope/detail/topic semantics are already fully documented in 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?

It states a specific action and resource: dumping one static catalog from the Lampa snapshot. It immediately distinguishes the tool from four sibling behaviors: search_code, trace_symbol, explain_docs, and guide_cub. An agent can recognize this as static catalog retrieval rather than search, tracing, documentation, or live CUB access.

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 says what the tool is not and names the alternatives, giving clear routing guidance. It also explains when to use query or a narrower topic if the R2 index is missing, and provides a concrete example with topic=events, query='player', and detail=true.

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

plan_changePlan a Lampa feature changeA
Read-onlyIdempotent

Generate a step-by-step implementation plan with inferred targets, a reverse-ref sample, and coupling risks for a Lampa change. Call this before draft_patch; unlike draft_patch it does not invent diffs, unlike trace_symbol it covers a whole request rather than one file/event, unlike scaffold_plugin it plans edits to existing code. request='add a sleep timer' + scope_hint='player' concatenates into feature inference; empty inference still returns a plan (not an error). Snapshot-only — does not execute or write; heuristic — not a guarantee; affected-surface list caps at ~12 files.

NameRequiredDescriptionDefault
requestYesPlain-language description of the change, e.g. 'add a sleep timer to the player'.
scope_hintNoOptional hint for which feature area is involved, e.g. 'player' or 'plugins/iptv'.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A5/5.0
Behavior5/5

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

The annotations already indicate read-only, non-destructive, idempotent behavior, and the description adds meaningful context beyond that: snapshot-only, no execution/writes, heuristic not a guarantee, and affected-surface list capped at ~12 files. No contradiction exists between the description and annotations.

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 in the description carries distinct information: purpose, usage order and exclusions, parameter behavior, and operational caveats. It is dense but well-structured, with the core purpose front-loaded before supporting details.

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 is complete for a planning tool of this complexity. Since an output schema exists, return-value details are not required, and the description covers usage order, sibling distinctions, parameter semantics, and behavioral limitations in enough depth for an agent to invoke it correctly.

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?

Input schema coverage is 100%, so request and scope_hint are documented. The description adds valuable semantic context: how request and scope_hint concatenate into feature inference and that empty inference still produces a plan rather than an error.

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 begins with a specific verb and resource: generating a step-by-step implementation plan with inferred targets, a reverse-ref sample, and coupling risks. It is immediately distinguishable from siblings through explicit contrasts with draft_patch, trace_symbol, and scaffold_plugin.

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 says to call this tool before draft_patch and explains what it does not do compared to draft_patch, trace_symbol, and scaffold_plugin. It also covers behavior like empty inference still returning a plan, so an agent knows when the tool remains usable.

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

read_sourceRead Lampa source file bytesA
Read-onlyIdempotent

Read bytes from one known path: a repo file, a src/core module, or a src/templates template. Unlike search_code/find_files, this returns contents of a single target — do not dump catalogs (list_catalog). Full files truncate at max_lines (default 300); pass start_line+end_line (1-based, inclusive) for a range (ignores max_lines); kind=file requires file; omit file with kind=core/template to list; missing path → error.

NameRequiredDescriptionDefault
fileNoRepo-relative path, core module name (kind=core), or template name (kind=template). Required for kind=file.
kindNofile (default)=any path; core=src/core module; template=src/templates markup.
end_lineNoLast line to read (inclusive). Pair with start_line.
max_linesNoCap when reading a full file. Default 300. Ignored when start_line/end_line are set.
start_lineNoFirst line to read (1-based). Pair with end_line.
template_modeNoFor kind=template: list catalog, html markup, or raw JS. Default list when file omitted.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A5/5.0
Behavior5/5

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

Annotations already mark the tool as readonly and idempotent, and the description adds valuable behavioral details: full-file truncation at max_lines, the range behavior ignoring max_lines, the missing-path error, and the kind-dependent behavior. These details are not inferable from the annotations alone.

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 clause earns its place: scope is front-loaded, sibling distinctions come next, and then concrete behavioral rules and error handling. There is no filler or redundant restatement of the title or schema.

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 6-parameter read tool with rich annotations, an output schema, and several sibling tools, the description covers selection, parameter interactions, defaults, and error outcomes. An agent has everything needed to invoke it correctly without needing additional context.

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?

Schema coverage is 100%, but the description still adds meaning beyond the schema: it documents the default max_lines of 300, the precedence of start_line/end_line over max_lines, the file-required rule for kind=file, and the omit-file listing behavior. This goes well beyond the individual parameter descriptions.

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 first sentence clearly states the tool reads bytes/contents from one known path: a repo file, a src/core module, or a src/templates template. It also differentiates itself from search_code/find_files and explicitly warns against list_catalog, so an agent can identify its exact purpose.

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 explains when to use this tool versus alternatives: it returns a single target's contents, unlike search_code/find_files, and should not be used to dump catalogs. It also provides per-kind invocation rules, such as kind=file requiring a file and omitting file with core/template to list.

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

resolve_edit_pathResolve authoritative Lampa edit pathA
Read-onlyIdempotent

Map a change kind (lang, sass, template, component, plugin, core, interaction, settings) to the authoritative src/ or plugins/ path and list generated public/build copies to avoid. Call this before plan_change or draft_patch; unlike find_files, this is a fixed landmark table look-up (no filesystem walk, no content search), not a search. Example: kind=plugin name='tracks' returns plugins/tracks specifically, vs kind=lang name='en' returns src/lang/en.js; an unrecognized name does not fail — it falls back to the kind's default authoritative/avoid paths so the call always returns something actionable. name has no effect for kind=sass or kind=settings — those paths are fixed and have no per-name variant, so it is silently ignored there.

NameRequiredDescriptionDefault
kindYesWhat kind of source you intend to change.
nameNoOptional plugin id (e.g. 'tracks') or lang code (e.g. 'en'). Unknown values still return the kind's default paths.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, closed-world, non-destructive), and the description adds behavior beyond that: no filesystem walk or content search, graceful fallback on unrecognized `name` so the call 'always returns something actionable', and silent ignoring of `name` for sass/settings. These are exactly the traits an agent needs to predict outcomes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical routing constraint ('call before plan_change/draft_patch') and the contrast with find_files are front-loaded, and every sentence carries information. It is slightly dense with examples and edge-case clauses packed into one long paragraph, which costs a point against a tighter structure.

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 two-parameter, read-only lookup with an output schema (so return values needn't be described), the description covers ordering relative to siblings, fallback behavior, and kind-specific edge cases. Nothing essential for calling it correctly is missing.

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 coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema: it enumerates what each `kind` maps to with two worked examples, states `name` has no effect for `kind=sass` and `kind=settings`, and clarifies the fallback for unknown names. That is meaning the schema alone does not convey.

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 ('Map') and resource ('a change kind ... to the authoritative src/ or plugins/ path'), lists the exact enum values, and explicitly contrasts itself with `find_files` as a fixed landmark look-up rather than a search. An agent can distinguish it from every sibling without opening the schema.

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 an explicit precondition ('Call this before `plan_change` or `draft_patch`') and a negative rule ('unlike `find_files`, this is a fixed landmark table look-up ... not a search'). The two concrete examples (kind=plugin vs kind=lang) further pin down intended use.

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

scaffold_pluginGenerate Lampa plugin, setting, or hook textA
Read-onlyIdempotent

Returns markdown only; does not write the repository — not a patch against existing files (draft_patch). kind=plugin emits a full main.js scaffold: requires plugin_name + description; plugin_kind (screen default | player | context-menu | settings-only) applies only here. kind=setting emits a SettingsApi registration snippet: requires key + label + type (type=toggle aliases trigger). kind=hook emits the best-matching Listener/Player hook: requires trigger. A missing required combo for the chosen kind errors instead of returning a partial scaffold. Follow up with validate_code mode=plugin on the result.

NameRequiredDescriptionDefault
keyNoFor kind=setting: Storage key, e.g. 'myplugin_enabled'. Prefix with plugin name.
kindYesplugin=full main.js scaffold; setting=SettingsApi snippet; hook=Listener catalog.
typeNoFor kind=setting: param type. toggle aliases trigger.
labelNoFor kind=setting: human-readable UI label.
optionsNoFor kind=setting type=select: option ids.
triggerNoFor kind=hook: event or lifecycle moment, e.g. 'player start', 'app ready', 'card full'.
componentNoFor kind=setting: Settings section id. Defaults to key prefix before '_'.
descriptionNoFor kind=plugin: one-sentence description of what the plugin does.
plugin_kindNoFor kind=plugin: screen (default) | player | context-menu | settings-only.
plugin_nameNoFor kind=plugin: snake_case folder/id, e.g. 'my_feature'.
default_valueNoFor kind=setting: default value.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A5/5.0
Behavior5/5

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

Even though annotations already mark the tool as read-only and idempotent, the description adds valuable behavioral detail: it returns markdown only, errors on missing required combinations, and offers best-matching hook selection. These are operational traits an agent needs that annotations do not fully convey.

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 well-structured, front-loading the safety-critical fact that it does not write files before explaining each kind. Every sentence carries actionable information with no filler.

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 an output schema exists and annotations cover safety, the description completes the picture by specifying required parameter combos, error behavior, and the recommended follow-up validation step. An agent can correctly invoke this tool across all three kinds without further clarification.

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?

Schema coverage is 100%, but the description adds crucial grouping semantics by kind, required parameter combinations, and the toggle/trigger alias. It explains that plugin_kind applies only to kind=plugin, which is not clear from the schema alone.

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 clear statement that the tool returns markdown and does not write the repository, then defines the three distinct kinds of scaffold output. It explicitly distinguishes itself from draft_patch, so an agent can tell which tool produces text versus patches.

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 gives explicit per-kind guidance: which parameters are required, when plugin_kind applies, and that validate_code should be used as a follow-up. It also states when this tool is not appropriate by naming draft_patch, making the decision boundaries clear.

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

search_codeSearch Lampa source contentsA
Read-onlyIdempotent

Search Lampa source contents for a literal or regex and return path:line plus a preview. Use this when you know a symbol or pattern; do not use it to list files by name (find_files), dump catalogs (list_catalog), or read one known path (read_source). Defaults: literal, case-sensitive match (regex=true compiles RegExp exactly as written — no implicit i); extensions .js/.ts/.css/.scss/.html/.json unless globs is set — an empty globs array is treated the same as omitting it, not as 'no extensions'. prefix narrows which folder is walked and globs still filters extensions within it — the two combine rather than override each other. Limits: 100 hits total, 5 per file, 200-char preview per line (fixed, to keep results small enough for one call); invalid regex → error naming the bad pattern; no matches → empty markdown, not an error.

NameRequiredDescriptionDefault
globsNoExtension globs to restrict search, e.g. ['*.js','*.ts']. When omitted, searches .js/.ts/.css/.scss/.html/.json.
queryYesLiteral substring (default, case-sensitive) or regex when regex=true.
regexNoIf true, compile query as a JS RegExp with no extra flags (no implicit case-insensitive). Default false (literal).
prefixNoRepo-relative folder to walk, e.g. 'src' or 'plugins/iptv'. Combines with globs (prefix walks, globs filter extensions).

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/non-destructive and closed-world, so the safety profile is covered structurally. The description adds genuinely useful disclosure beyond that — default match mode, case-sensitivity, extension defaults, empty-globs equivalence, prefix+globs interaction, hard limits (100 hits, 5/file, 200-char preview), and the invalid-regex / no-match behaviors. Those limits and edge-case semantics are real added value, though return shape is mostly delegated to the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and sibling routing before defaults/limits, and each sentence carries distinct information. It is dense but not padded; the backtick-heavy prose is slightly harder to scan than necessary.

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?

An output schema exists, so return values need not be spelled out, yet the description still characterizes the hit format (path:line plus preview) and truncation size. Combined with defaults, limits, and failure modes, an agent has everything needed to call it correctly and interpret the result bounds.

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 coverage is 100%, so baseline is 3. The description goes beyond it on two points the schema does not state plainly: an empty `globs` array is treated as omitted rather than 'no extensions', and `prefix` and `globs` combine rather than override. The regex wording largely restates the schema's own note about no implicit `i`.

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 contents) and resource (Lampa source), and explicitly distinguishes itself from three siblings — find_files, list_catalog, read_source — by naming what each of those does instead. An agent can route correctly without opening any schema.

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?

Gives an explicit positive trigger ('when you know a symbol or pattern') and three explicit exclusions with the correct alternative named for each. Nothing about tool selection is left to inference.

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

summarize_repoSummarize Lampa repo layoutA
Read-onlyIdempotent

Summarize the Lampa snapshot — commit metadata, top-level folders, plugins, entrypoints, and npm scripts — for first-session orientation. Returns a single markdown report (see output schema), not JSON. Do not use it to read bytes (read_source), search contents (search_code), or list files by name (find_files). Omit subfolder for the compact overview; subfolder='src/components' adds a recursive JS/TS-only listing under that prefix, matched case-sensitively against the snapshot's real path casing (an empty result is a valid 'no JS/TS files here' answer, not an error) on top of the same overview; unknown folder or missing repo → error; stdio needs LAMPA_REPO_PATH and Worker PAT is transport-only (no extra scopes or rate limits beyond GitHub's).

NameRequiredDescriptionDefault
subfolderNoRepo-relative prefix whose JS/TS files to list recursively, e.g. 'src/components'. Omit for the compact overview. Unknown folder → error.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the read-only and idempotent annotations, the description discloses that the result is a single markdown report rather than JSON, that `subfolder` triggers a recursive JS/TS-only listing, that matching is case-sensitive, and that an empty result is a valid answer rather than an error. It also covers error cases and transport/auth constraints that the annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and return format are front-loaded, and every clause carries useful information. The description is dense and semicolon-heavy, which slightly reduces readability, but it does not waste space on redundant or irrelevant details.

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 the tool's purpose, return format, parameter behavior, error cases, and auth/transport constraints. With a rich output schema and annotations already present, this is complete enough for an agent to call the tool correctly.

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 substantial meaning beyond the schema: omitting `subfolder` produces the compact overview, while supplying it adds a recursive JS/TS-only listing under a case-sensitive path prefix. It also clarifies that unknown folders or missing repos produce errors and that empty results are valid.

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 uses a specific verb and resource: "Summarize the Lampa snapshot," and enumerates the exact contents: commit metadata, top-level folders, plugins, entrypoints, and npm scripts. It clearly distinguishes the tool from `read_source`, `search_code`, and `find_files`.

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 states the intended use case as "first-session orientation" and explicitly lists when not to use it, naming the sibling tools for reading bytes, searching contents, and listing files. It also explains how to choose between the compact overview and the `subfolder` listing.

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

trace_symbolTrace one Lampa symbol through codeA
Read-onlyIdempotent

Follow one event, component, file, or provider through the snapshot graph — not a full catalog (list_catalog) and not raw grep (search_code). Returns a markdown report (see output schema); large result sets are truncated with an explicit count, never silently paginated. Examples: mode=event target='app'; lifecycle target='src/components/full.js'; deps a file path; upgrade a repo-relative file path (not an API name); omit target only for api_calls (optional target is a provider keyword). Missing target otherwise → error; unknown event → markdown note (not a crash); deps reverse-refs cap at 20.

NameRequiredDescriptionDefault
modeYesevent=Listener bus; lifecycle=component contract; deps=import blast radius; api_calls=external fetches; upgrade=scan a file for 2.x→Maker APIs.
targetNoRequired except api_calls. event: name e.g. 'app'/'player'; lifecycle: component name or path e.g. 'src/components/full.js'; deps/upgrade: repo-relative file path; api_calls: optional provider keyword.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world; the description adds behavior they don't cover: truncation with an explicit count and no silent pagination, missing-target → error, unknown event → markdown note rather than a crash, and a 20-item cap on deps reverse refs. That is exactly the failure-mode context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the scope and the sibling disambiguation, then mode examples and behavioral caveats — no sentence is filler. It is densely parenthetical, though, and the clipped example fragments take a second read, costing a point on structure.

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, return values needn't be described, and the description correctly points at it while covering the things the schema can't: truncation, error vs. soft-note behavior, and per-mode targeting. Nothing needed to invoke it correctly is missing.

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 coverage is 100%, so the enum and target rules are largely already documented; the description still adds value by pairing each mode with a concrete example target and clarifying that `upgrade` expects a repo-relative path rather than an API name. It mostly mirrors the schema, hence 4 rather than 5.

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 and object ('Follow one event, component, file, or provider through the snapshot graph') and explicitly names the two siblings it is not: `list_catalog` (full catalog) and `search_code` (raw grep). An agent can distinguish it without opening any schema.

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?

Gives per-mode usage examples (event/lifecycle/deps/upgrade/api_calls), states the exclusion 'omit target only for api_calls', and warns that `upgrade` takes a file path 'not an API name'. When-to-use and when-not-to-use are both covered, plus routing to alternatives.

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

validate_codeValidate Lampa plugin, grep, i18n, or buildA
Read-onlyIdempotent

Run checks and hints, not catalogs (list_catalog) and not edit plans (plan_change); prefer analyze_plugin for a descriptive report and trace_symbol for dependency graphs — this tool only scores/lints/hints, it never describes structure. mode=plugin scores a plugin against official pitfalls (target required); grep scans the snapshot for TODOs/console.log/undefined/lang/hardcoded HTML (not a shell, no code execution); i18n looks up key or, if omitted, coverage vs en.js; build returns the npm/gulp command for a goal as text — it never runs it. Example: mode=grep checks=['todos','console_logs']; mode=i18n key='player_playlist' or omit key for a full coverage table. checks only applies to mode=grep (default: all five checks); show_missing only applies to i18n coverage and is ignored once key is set; goal only applies to mode=build; target is required only for mode=plugin (folder or JS path) — missing plugin → error listing folders, missing target for mode=plugin → error naming the requirement.

NameRequiredDescriptionDefault
keyNoFor mode=i18n: specific translation key. Omit for coverage report.
goalNoFor mode=build: which command to hint (does not execute). Default build.
modeYesplugin=convention score; grep=snapshot quality scans (not a shell); i18n=keys/coverage; build=command hint (does not run npm/gulp).
checksNoFor mode=grep: which checks. Defaults to all.
targetNoRequired for mode=plugin: plugin folder name or repo-relative JS path. Missing plugin → error listing folders.
show_missingNoFor mode=i18n coverage: include missing/extra key lists. Default true.

Output Schema

NameRequiredDescription
markdownYesHuman-readable markdown report. Always present, including empty-result cases. Does not write files.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavior: no shell and no code execution in `grep`, `build` never runs npm/gulp, and specific error semantics (missing plugin lists folders; missing `target` errors naming the requirement). These are exactly the side-effect and failure details annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Content is front-loaded with purpose and sibling routing before mode details, and every clause carries information. However the em-dash run-ons and stacked parentheticals make some sentences dense enough to require re-reading.

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, annotations covering the safety profile, and 100% schema coverage, the description supplies the remaining missing layer: mode selection, parameter conditionality, and error behavior. Nothing an agent needs to invoke any of the four modes correctly is absent.

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?

Schema coverage is 100%, so the baseline is 3, but the description goes beyond per-field docs by stating cross-parameter conditionality: `checks` applies only to grep (default all five), `show_missing` only to i18n coverage and is ignored once `key` is set, `goal` only to build, `target` required only for plugin. That conditional logic is not derivable from the schema alone.

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 opening sentence states a specific verb and resource ("Run checks and hints") and explicitly negates the two most confusable siblings (`list_catalog`, `plan_change`) while naming the better alternatives `analyze_plugin` and `trace_symbol`. An agent can pick this tool over any sibling without opening a schema.

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 when-to-use for each of the four modes (`plugin` scores pitfalls, `grep` scans snapshot, `i18n` looks up key/coverage, `build` returns a command) plus explicit when-not-to-use by routing descriptive/graph work to `analyze_plugin` and `trace_symbol`. Two concrete invocation examples are supplied.

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. 2 tool updatesv1.9.0
    • Addedguide_external_api
    • Addedguide_plugin_catalog
  2. 13 tool updatesv1.8.0
    • Addedanalyze_plugin
    • Removedcub_guide
    • Addedexplain_docs
    • Removedexplain_lampa
    • Addedguide_cub
    • Addedlist_catalog
    • Removedmap_lampa
    • Removedplugin_deep_dive
    • Removedrepo_overview
    • Changedsearch_code1 field changed
      • changedInput schema / properties / prefix / description
        Previous value: -"Repo-relative folder to walk, e.g. 'src' or 'plugins/iptv'. Preferred over globs when the area is known."New value: +"Repo-relative folder to walk, e.g. 'src' or 'plugins/iptv'. Combines with globs (prefix walks, globs filter extensions)."
    • Addedsummarize_repo
    • Removedtrace_lampa
    • Addedtrace_symbol
  3. 8 tool updatesv1.7.0
    • Changeddraft_patch2 fields changed
      • changedInput schema / properties / plan_context / description
        Previous value: -"Paste the output of plan_change here for best results."New value: +"Optional paste of plan_change output. Recommended; the tool still runs without it."
      • changedInput schema / properties / target_files / description
        Previous value: -"Files to focus on (repo-relative paths). Inferred from request if omitted."New value: +"Repo-relative files to patch. If omitted, up to 5 files are inferred from request (weaker than plan_context)."
    • Changedfind_files3 fields changed
      • changedInput schema / properties / ext / description
        Previous value: -"For mode=name only: extension filter, e.g. '.js' or '.scss'."New value: +"For mode=name only: extension filter, e.g. '.js' or '.scss'. Ignored otherwise."
      • changedInput schema / properties / mode / description
        Previous value: -"name (default)=filename; feature=Lampa feature map; ui=templates/components; styles=css/scss; tests=spec files."New value: +"name (default)=filename substring; feature=built-in Lampa feature map + filename; ui=templates/components (+ up to 20 content hits); styles=css/scss (+ up to 15 content hits); tests=spec files."
      • changedInput schema / properties / query / description
        Previous value: -"Filename substring, feature name, UI component, style module, or spec keyword depending on mode."New value: +"Filename substring (mode=name), feature name (mode=feature, e.g. player/catalog/iptv), UI component, style module, or spec keyword."
    • Changedmap_lampa1 field changed
      • changedInput schema / properties / query / description
        Previous value: -"Optional filter: API module, storage key, component name, flag keyword, or folder (for network)."New value: +"Filter the chosen catalog only (not a repo-wide search): API module, storage key, component name, flag keyword, or folder (for network)."
    • Changedrepo_overview1 field changed
      • changedInput schema / properties / subfolder / description
        Previous value: -"Optional repo-relative folder whose JS/TS modules to list, e.g. 'src/components'. Omit for overview only."New value: +"Repo-relative prefix whose JS/TS files to list recursively, e.g. 'src/components'. Omit for the compact overview. Unknown folder → error."
    • Changedresolve_edit_path1 field changed
      • changedInput schema / properties / name / description
        Previous value: -"Optional name, e.g. plugin id 'tracks' or lang code 'en'."New value: +"Optional plugin id (e.g. 'tracks') or lang code (e.g. 'en'). Unknown values still return the kind's default paths."
    • Changedsearch_code4 fields changed
      • changedInput schema / properties / globs / description
        Previous value: -"File glob patterns to restrict search, e.g. ['*.js','*.ts']."New value: +"Extension globs to restrict search, e.g. ['*.js','*.ts']. When omitted, searches .js/.ts/.css/.scss/.html/.json."
      • changedInput schema / properties / prefix / description
        Previous value: -"Repo-relative folder to search within, e.g. 'src' or 'plugins/iptv'."New value: +"Repo-relative folder to walk, e.g. 'src' or 'plugins/iptv'. Preferred over globs when the area is known."
      • changedInput schema / properties / query / description
        Previous value: -"Text or regex to search for in file contents."New value: +"Literal substring (default, case-sensitive) or regex when regex=true."
      • changedInput schema / properties / regex / description
        Previous value: -"Treat query as a regex. Default false (literal)."New value: +"If true, compile query as a JS RegExp with no extra flags (no implicit case-insensitive). Default false (literal)."
    • Changedtrace_lampa2 fields changed
      • changedInput schema / properties / mode / description
        Previous value: -"event=Listener bus; lifecycle=component contract; deps=import blast radius; api_calls=external fetches; upgrade=2.x→Maker."New value: +"event=Listener bus; lifecycle=component contract; deps=import blast radius; api_calls=external fetches; upgrade=scan a file for 2.x→Maker APIs."
      • changedInput schema / properties / target / description
        Previous value: -"Event name, component name/path, file path, or provider keyword depending on mode. Required except api_calls."New value: +"Required except api_calls. event: name e.g. 'app'/'player'; lifecycle: component name or path e.g. 'src/components/full.js'; deps/upgrade: repo-relative file path; api_calls: optional provider keyword."
    • Changedvalidate_code3 fields changed
      • changedInput schema / properties / goal / description
        Previous value: -"For mode=build: which command to hint. Default build."New value: +"For mode=build: which command to hint (does not execute). Default build."
      • changedInput schema / properties / mode / description
        Previous value: -"plugin=convention score; grep=quality scans; i18n=keys/coverage; build=command hint."New value: +"plugin=convention score; grep=snapshot quality scans (not a shell); i18n=keys/coverage; build=command hint (does not run npm/gulp)."
      • changedInput schema / properties / target / description
        Previous value: -"For mode=plugin: plugin folder or repo-relative JS path."New value: +"Required for mode=plugin: plugin folder name or repo-relative JS path. Missing plugin → error listing folders."
  4. 50 tool updatesv1.6.0
    • Removedadd_setting
    • Removedcomponent_lifecycle
    • Addedcub_guide
    • Removeddoc_lookup
    • Changeddraft_patch4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedInput schema / properties / plan_context / description
        Previous value: -"Paste the output of plan_feature_change here for best results."New value: +"Paste the output of plan_change here for best results."
      • changedInput schema / properties / target_files / description
        Previous value: -"Files to focus on (repo-relative paths)."New value: +"Files to focus on (repo-relative paths). Inferred from request if omitted."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "markdown": {
        +      "description": "Human-readable markdown report. Always present, including empty-result cases. Does not write files.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "markdown"
        +  ],
        +  "type": "object"
        +}
    • Addedexplain_lampa
    • Removedexplain_lampa_pattern
    • Removedextract_template_html
    • Removedfind_api_calls
    • Removedfind_feature
    • Changedfind_files7 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedInput schema / properties / ext / description
        Previous value: -"File extension filter, e.g. '.js', '.scss'."New value: +"For mode=name only: extension filter, e.g. '.js' or '.scss'."
      • addedInput schema / properties / mode
        Added value: +{
        +  "description": "name (default)=filename; feature=Lampa feature map; ui=templates/components; styles=css/scss; tests=spec files.",
        +  "enum": [
        +    "name",
        +    "feature",
        +    "ui",
        +    "styles",
        +    "tests"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / pattern
        Removed value: -{
        -  "description": "Substring or glob pattern to match against file names.",
        -  "type": "string"
        -}
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "Filename substring, feature name, UI component, style module, or spec keyword depending on mode.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "pattern"
        -]New value: +[
        +  "query"
        +]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "markdown": {
        +      "description": "Human-readable markdown report. Always present, including empty-result cases. Does not write files.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "markdown"
        +  ],
        +  "type": "object"
        +}
    • Removedfind_settings
    • Removedfind_styles_for_module
    • Removedfind_translation_keys
    • Removedfind_ui_component
    • Removedgenerate_plugin_boilerplate
    • Removedget_core_module
    • Removedget_network_map
    • Removedget_storage_schema
    • Removedimpact_analysis
    • Removedinsert_hook
    • Removedlampa_api_surface
    • Removedlist_all_events
    • Removedlist_modules
    • Removedlist_related_tests
    • Removedlist_scripts
    • Removedlist_streaming_providers
    • Removedlist_templates
    • Addedmap_lampa
    • Removedmodule_dependency_map
    • Addedplan_change
    • Removedplan_feature_change
    • Changedplugin_deep_dive4 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • changedInput schema / properties / plugin / description
        Previous value: -"Plugin folder name inside plugins/, e.g. 'online', 'iptv', 'collections', 'shots', 'online_prestige', 'dlna'."New value: +"Plugin folder inside plugins/, e.g. 'online', 'iptv', 'collections'. Omit for load-path only."
      • removedInput schema / required
        Removed value: -[
        -  "plugin"
        -]
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "markdown": {
        +      "description": "Human-readable markdown report. Always present, including empty-result cases. Does not write files.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "markdown"
        +  ],
        +  "type": "object"
        +}
    • Removedread_file
    • Removedread_file_segment
    • Addedread_source
    • Changedrepo_overview3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / subfolder
        Added value: +{
        +  "description": "Optional repo-relative folder whose JS/TS modules to list, e.g. 'src/components'. Omit for overview only.",
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "markdown": {
        +      "description": "Human-readable markdown report. Always present, including empty-result cases. Does not write files.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "markdown"
        +  ],
        +  "type": "object"
        +}
    • Addedresolve_edit_path
    • Removedrisk_scan
    • Removedrun_build_hint
    • Removedrun_grep_checks
    • Addedscaffold_plugin
    • Removedscaffold_plugin_integration
    • Changedsearch_code5 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • addedInput schema / properties / prefix
        Added value: +{
        +  "description": "Repo-relative folder to search within, e.g. 'src' or 'plugins/iptv'.",
        +  "type": "string"
        +}
      • changedInput schema / properties / query / description
        Previous value: -"Text or regex to search for."New value: +"Text or regex to search for in file contents."
      • changedInput schema / properties / regex / description
        Previous value: -"Treat query as a regex. Default false."New value: +"Treat query as a regex. Default false (literal)."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "https://json-schema.org/draft/2020-12/schema",
        +  "additionalProperties": false,
        +  "properties": {
        +    "markdown": {
        +      "description": "Human-readable markdown report. Always present, including empty-result cases. Does not write files.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "markdown"
        +  ],
        +  "type": "object"
        +}
    • Removedsuggest_edit_targets
    • Removedtrace_event
    • Addedtrace_lampa
    • Removedtranslation_coverage
    • Addedvalidate_code
    • Removedvalidate_plugin
  5. 41 tool updatesv1.0.0
    • First observedadd_setting
    • First observedcomponent_lifecycle
    • First observeddoc_lookup
    • First observeddraft_patch
    • First observedexplain_lampa_pattern
    • First observedextract_template_html
    • First observedfind_api_calls
    • First observedfind_feature
    • First observedfind_files
    • First observedfind_settings
    • First observedfind_styles_for_module
    • First observedfind_translation_keys
    • First observedfind_ui_component
    • First observedgenerate_plugin_boilerplate
    • First observedget_core_module
    • First observedget_network_map
    • First observedget_storage_schema
    • First observedimpact_analysis
    • First observedinsert_hook
    • First observedlampa_api_surface
    • First observedlist_all_events
    • First observedlist_modules
    • First observedlist_related_tests
    • First observedlist_scripts
    • First observedlist_streaming_providers
    • First observedlist_templates
    • First observedmodule_dependency_map
    • First observedplan_feature_change
    • First observedplugin_deep_dive
    • First observedread_file
    • First observedread_file_segment
    • First observedrepo_overview
    • First observedrisk_scan
    • First observedrun_build_hint
    • First observedrun_grep_checks
    • First observedscaffold_plugin_integration
    • First observedsearch_code
    • First observedsuggest_edit_targets
    • First observedtrace_event
    • First observedtranslation_coverage
    • First observedvalidate_plugin

TDQS

A4.4/5.0

Scored across 16 tools

Disambiguation4/5

Most tools have clearly distinct purposes, and the descriptions aggressively call out non-use cases (e.g. search_code vs find_files vs read_source). However, the numerous documentation/catalog tools — list_catalog, explain_docs, guide_cub, guide_external_api, guide_plugin_catalog — overlap conceptually enough that an agent must read carefully to choose correctly.

Naming Consistency5/5

All tool names are snake_case and follow a predictable verb_noun or guide_noun pattern. There is no mixing of camelCase, inconsistent verb styles, or vague standalone names.

Tool Count3/5

At 16 tools, the server is just over the typical well-scoped range and feels somewhat heavy. The count is partly justified by broad coverage, but several guide/catalog tools could likely be consolidated without losing capability.

Completeness4/5

The surface covers orientation, search, file inspection, plugin scaffolding, analysis, planning, patch drafting, validation, and documentation/guides. It is nearly complete for a read-only Lampa developer assistant, though it intentionally does not apply edits or write files, leaving that as a manual follow-up.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server providing 29 tools across 5 layers for semantic TypeScript/JavaScript code intelligence, enabling AI agents to find references, trace impacts, guard APIs, and explain errors without text-search false positives.
    4 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for local-first code intelligence, providing structural code graph, semantic search, and impact analysis to AI agents.
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A production-ready MCP server that enables AI assistants to intelligently understand, analyze, edit, navigate, and review software projects with multi-workspace support, Git integration, and semantic search.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that analyzes codebases to provide dependency graphs, impact analysis, and file insights across 15+ programming languages, enabling AI assistants to understand project structure and navigate code efficiently.
    MIT