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 the case-sensitive directory name (e.g. online, iptv), not a manifest id; omit it for load-path-only output; an unknown folder errors and lists available folders instead of guessing.

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

Output Schema

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

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds substantive behavioral context beyond that: the deterministic entry-file selection order, the truncation of the entry preview to ~30 lines, the load-path-only output mode when `plugin` is omitted, and the failure behavior ('an unknown folder errors and lists available folders instead of guessing'). These are exactly the outcome-shaping traits an agent needs to predict results, and they do not contradict the idempotent/read-only hints.

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?

Both sentences are information-dense with zero filler; the purpose and report inventory are front-loaded, and sibling contrasts come immediately after. The only nit is that the second sentence crams four distinct rules (entry-file selection, directory-name constraint, omit mode, error behavior) into one long em-dash/semicolon chain, which slightly reduces scannability compared to crisp bullet points. Minor structural cost given how much genuinely useful content is packed in.

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-optional-parameter tool with 100% schema coverage, an existing output schema (so return format need not be restated), and annotations covering the safety profile, the description covers every remaining decision point: scope, report contents, sibling routing, entry-file resolution, naming rules, the no-argument mode, and error handling. Nothing an agent needs 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — the schema already documents the case-sensitive directory-name constraint, the 'not a manifest id' clarification, examples ('online', 'iptv', 'collections'), and the omit-for-load-path-only behavior. The description reinforces these points and ties the parameter to entry-file resolution, but it adds no meaning the schema lacks. Baseline 3 applies as the schema carries the full burden.

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?

Named with a specific verb+resource+scope: 'Single-call report for one `plugins/<name>` folder,' followed by a concrete inventory of report contents (files, Lampa.* usage, Listener follow/send, settings, CSS, entry preview, plugin-loading mechanism). It explicitly distinguishes itself from three siblings: '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.' An agent can select or reject this tool 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?

The description names the exact alternatives ('list_catalog', 'trace_symbol', 'validate_code') and the conditions that route an agent away from this tool. It also gives operational guidance: the entry-file fallback chain (main.js, then <plugin>.js, then first .js), the case-sensitive directory-name requirement ('not a manifest id'), the omit-for-load-path-only mode, and the error-and-list behavior for unknown folders. This is explicit when/when-not plus usage procedures, with nothing left 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); 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.

ParametersJSON Schema
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

ParametersJSON 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 the tool non-destructive and idempotent, but the description adds essential behavioral context: it does not write the repo, missing files produce a 'File not found' note rather than aborting, and hunks are suggested not guaranteed to apply. No contradiction with annotations exists.

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 information-dense but every sentence carries unique value: core behavior, sibling contrasts, parameter override semantics, error behavior, and a safety caution. The most important fact (no repo writes) is front-loaded.

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, the description need not explain return values; it covers error handling, inference behavior, application risk, and proper usage with plan_context. The calls to read_source for verification complete the decision context for the agent.

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 adds significant meaning beyond the schema: target_files fully overrides inference and the two are never combined, inference is limited to up to 5 files, and plan_context strengthens results from request alone. This clearly explains parameter interplay and trade-offs.

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 precise verb and object: 'Returns TODO unified diffs as text only — does not write the repository.' This clearly identifies the tool's function and scope while explicitly contrasting it with plan_change and scaffold_plugin, so an agent can distinguish it from siblings without opening them.

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 concrete when-to-use guidance: 'Best with plan_context pasted from plan_change' and differentiates behavior from plan_change (invents concrete diff hunks) and scaffold_plugin (patches existing files rather than emitting boilerplate). It also warns to re-check against read_source before applying, which clarifies post-call workflow.

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.

ParametersJSON Schema
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

ParametersJSON 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 ignored unless mode=name); empty matches → list, not an error.

ParametersJSON Schema
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

ParametersJSON 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 signal read-only, idempotent, non-destructive behavior, and the description adds meaningful runtime behavior beyond them: content-hit limits for ui/styles modes, no file bytes returned, ext being ignored outside mode=name, and empty-match handling. This gives an accurate model of what the tool will actually do.

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 earns its place: the first defines scope, the second differentiates from siblings, the third gives two concrete usage examples and a failure-mode note. Dense but highly informative, with the most important scoping information front-loaded.

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 rich annotations, a complete input schema, an output schema, and explicit sibling differentiation, the description covers everything needed for correct selection and invocation. It explains edge cases, mode-specific behavior, and return expectations sufficiently.

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?

Input schema coverage is 100%, so the baseline is 3. The description adds value with concrete examples tying query/mode/ext together and clarifies the built-in feature map for mode=feature. The schema already documents the per-mode behavior, but the examples and constraints improve usability.

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 clear, specific verb ('Locate') and resource ('repo-relative paths') and immediately distinguishes the tool from search_code and read_source by saying what it matches and what it does not return. The modal examples make each mode's purpose explicit.

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 contrasts the tool with search_code ('matches names/paths... not content grep') and read_source ('does not return file bytes'), giving an agent clear routing criteria. It also explains when ext applies, how mode=feature behaves, and notes that empty matches return a list rather than an error.

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), and is not a substitute for cub.rip/developer. 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.

ParametersJSON Schema
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

ParametersJSON 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 readOnlyHint/idempotentHint/destructiveHint; the description reinforces and expands this with 'pure snapshot read' and 'makes no network calls of its own', and documents per-topic ignore/require behavior that annotations cannot convey. No contradiction with annotations was found.

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?

At roughly 150 words it is dense, but each clause covers one of the six topic modes and front-loads the core purpose and safety. No filler; the semicolon-delimited topic map is the most efficient way to convey the matrix of valid parameter combinations.

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 six topics and seven parameters, the description enumerates every topic's valid inputs and ignored fields, plus the tool's relationship to external docs and related tools. Given an output schema exists, not describing return values is acceptable; 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.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all 7 params, so baseline is 3, but the description adds high-value cross-parameter constraints: `endpoint` requires `path` and ignores `category`/`search`, `auth` reads only `auth_focus`, `sync` takes no parameters, and `timeline_hash` reads only `example`. These interdependencies are not inferable from individual 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 'Document how Lampa talks to CUB from source' – a specific verb and resource – and immediately separates it from `list_catalog` topics and cub.rip/developer, making the tool's CUB-specific scope unmistakable. It clearly distinguishes this from sibling tools without needing to open 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 explicit when-not guidance ('not a substitute for cub.rip/developer') and contrasts with the sibling `list_catalog` topic=mirrors/socket, making alternative selection concrete. The per-topic parameter rules also tell the agent exactly which parameters to provide for each mode, reducing guesswork.

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.

ParametersJSON Schema
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

ParametersJSON 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.

ParametersJSON Schema
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

ParametersJSON 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. 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 filters 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.

ParametersJSON Schema
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

ParametersJSON 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 readOnly, idempotent, and non-destructive behavior. The description adds valuable context beyond those annotations: this operates on a static snapshot rather than a live client, empty results render as markdown rather than error, and full-tree events/storage may require a prebuilt index on R2. 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 well-structured: a clear lead sentence, sibling exclusions, parameter semantics, a concrete example, and edge-case behavior. Every clause earns its place, and the most important information is front-loaded.

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 tool's four parameters, two enums, output schema, and fifteen siblings, the description covers all essential decision points: what the tool does, how it differs from alternatives, parameter interactions, empty-result behavior, and the R2 index caveat. Nothing critical is left ambiguous.

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?

Schema description coverage is 100%, so the baseline is 3. The description restates the schema's parameter constraints (scope only for api_surface/events/storage, detail only for events, query scoped to topic) and provides a small example, but it does not add substantial new meaning beyond what the schema already documents.

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 specific verb and resource: 'Dump one static catalog from the Lampa snapshot per call.' It then actively differentiates itself from four siblings (search_code, trace_symbol, explain_docs, guide_cub), so an agent can immediately tell what this tool is and is not.

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 when-not-to-use guidance by naming alternatives, and it provides conditional usage advice for R2 when the prebuilt index is missing. It also clarifies that query is a scoped filter, not a repo-wide search, which prevents misuse.

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.

ParametersJSON Schema
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

ParametersJSON 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.

ParametersJSON Schema
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

ParametersJSON 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.

ParametersJSON Schema
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

ParametersJSON 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, and non-destructive behavior, so the bar for additional disclosure is lower. The description adds valuable behavioral details: it is a fixed landmark lookup with no filesystem walk, and unrecognized names fall back to defaults so the call 'always returns something actionable.' These traits go beyond annotations and meaningfully shape invocation expectations.

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 compact and front-loaded: purpose first, usage second, then a concrete example plus edge-case behavior. Every sentence earns its place without repetition or 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 a rich annotation set, full parameter schema coverage, and an output schema, the description covers the remaining needs: when to call, what differentiates it, and a non-obvious fallback behavior. There is no critical missing context for correct tool selection and invocation.

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 for parameters is 100%, yet the description still adds meaning beyond the schema: it explains how kind+name interact via concrete examples (plugin 'tracks' vs lang 'en') and documents the fallback behavior for unknown names. This is exactly the kind of pragmatic detail an agent needs.

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 specific verb 'Map' and a clear resource: change kinds to authoritative src/ or plugins/ paths, including listing public/build copies to avoid. It also explicitly contrasts itself with find_files, making it easy to distinguish from sibling tools.

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 usage timing: 'Call this before plan_change or draft_patch.' It also states what this tool is not ('unlike find_files... not a search'), helping the agent select it over alternatives.

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.

ParametersJSON Schema
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

ParametersJSON 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. 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.

ParametersJSON Schema
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

ParametersJSON 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 readOnlyHint, idempotentHint, and destructiveHint false, so the description adds real behavioral detail beyond them: default literal/case-sensitive matching, regex compilation without implicit flags, default extension set, hit/line/preview limits, and error behavior for invalid regex and empty results. Nothing contradicts the 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 a tight block: one purpose sentence, one usage/routing sentence, one defaults sentence, one prefix/globs sentence, and one limits/error sentence. Every sentence earns its place and important facts are front-loaded.

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 four-parameter search tool with output schema and many siblings, the description covers purpose, alternatives, parameter interactions, defaults, limits, and error cases. An agent could select and invoke this tool correctly without needing additional details.

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?

The schema already describes all four parameters at 100% coverage, so this is above baseline; the description reinforces semantics by adding the default extension list and explicitly stating that prefix and globs combine rather than override, while noting regex gets no implicit flags. This is useful extra meaning even though much of it is already 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?

Opens with a specific verb and resource: 'Search Lampa source contents for a literal or regex and return path:line plus a preview.' It explicitly names sibling tools find_files, list_catalog, and read_source as things it is not, so an agent can distinguish it from alternatives.

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?

Directly says 'Use this when you know a symbol or pattern; do not use it to list files by name..., dump catalogs..., or read one known path...' and then details how prefix and globs combine. That is explicit 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.

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. 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 (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).

ParametersJSON Schema
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

ParametersJSON 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, and non-destructive behavior, and the description goes well beyond them: it discloses that an empty result is valid, unknown folders or missing repos error, and that stdio requires LAMPA_REPO_PATH while the Worker PAT is transport-only. 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?

The description is dense but every sentence earns its place: purpose, exclusions, parameter behavior, error semantics, and environment requirements. The key scoping information is front-loaded before the technical 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?

With an output schema already present, the description need not explain return values. It covers when to use the tool, how to choose between overview and recursive modes, error conditions, environment setup for stdio, and authorization constraints for the Worker PAT. This is complete for the tool's complexity.

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?

The input schema already documents subfolder with 100% coverage, but the description adds valuable semantics: subfolder produces a recursive JS/TS-only listing on top of the same overview, and an empty result is meaningful rather than an error. This supplements the schema without merely repeating it.

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 ('Summarize') and resource ('Lampa snapshot'), enumerates what is included (commit metadata, top-level folders, plugins, entrypoints, npm scripts), and states the intended use ('first-session orientation'). It also explicitly distinguishes itself from sibling tools by naming read_source, search_code, and find_files as tools not to use instead.

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 context, names the alternatives to avoid, and explains the conditional subfolder parameter behavior. The guidance about omitting subfolder for the compact overview and adding it for a recursive JS/TS listing leaves no ambiguity about how to invoke the tool.

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). 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.

ParametersJSON Schema
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

ParametersJSON 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 readOnlyHint, idempotentHint, and destructiveHint, and the description does not contradict them. It adds useful behavioral detail beyond annotations: missing target causes an error, unknown event produces a markdown note instead of crashing, and deps reverse-refs are capped at 20. These are exactly the kind of edge-case behaviors an agent needs to know.

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 efficient: purpose is front-loaded, the exclusions are one clause, examples are compressed into a semicolon list, and edge-case behaviors are stated compactly. Every segment carries necessary information for a tool with five modes.

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 output schema exists and annotations cover the safety profile, the description covers all needed call context: mode semantics, target requirements, error behavior, and a result cap. Nothing essential for selecting or invoking the tool correctly is missing.

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 description coverage is 100%, so the baseline is 3, but the description adds significant semantic value. It explains target semantics per mode, clarifies that deps/upgrade expect repo-relative paths (not API names), and specifies that api_calls takes an optional provider keyword. This goes well beyond the schema field 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 opens with a specific verb-resource pairing: 'Follow one event, component, file, or provider through the snapshot graph.' It explicitly contrasts itself with list_catalog and search_code, so an agent can immediately distinguish this from siblings 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 names the alternatives it is not ('not a full catalog (list_catalog) and not raw grep (search_code)') and provides concrete per-mode examples with target formats. It also states the key usage rule: omit target only for api_calls, otherwise target is required. This leaves no ambiguity about when or how to use the tool.

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). mode=plugin scores a plugin against official pitfalls; grep scans the snapshot for TODOs/console.log/undefined/lang/hardcoded HTML (not a shell); i18n looks up key or, if omitted, coverage vs en.js; build returns the npm/gulp command for a goal — it does not run it. checks only for mode=grep (default all); show_missing only for i18n coverage (ignored when key is set); goal only for mode=build; target is required for mode=plugin (folder or JS path); missing plugin → error listing folders.

ParametersJSON Schema
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

ParametersJSON 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 readOnlyHint, idempotentHint, and destructiveHint, and the description adds important behavioral details beyond those: build does not execute, grep is not a shell, missing plugin errors list folders, and show_missing is ignored when key is set. These disclosures fully inform the agent of side effects and failure modes.

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 adds value, with exclusions front-loaded and mode details organized by mode. There is no filler or repetition of schema content; the structure efficiently communicates complex conditional behavior.

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 six parameters, the description covers every mode, every parameter's applicability, error behavior, and exclusions. The presence of an output schema means return-value details need not be explained, so nothing essential is missing for correct invocation.

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 crucial mode-to-parameter mappings: checks only for grep, show_missing only for i18n coverage, goal only for build, and target required for plugin. It also explains conditional behaviors like default checks and ignored show_missing, which go beyond the raw schema 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 opens with a specific verb ('Run checks and hints') and defines four concrete modes with distinct outcomes: plugin scoring, grep snapshot scans, i18n key/coverage lookup, and build command hints. It explicitly excludes sibling tools like list_catalog and plan_change, making the tool's scope unmistakable.

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 provides explicit when-to-use guidance per mode, including exclusions ('not a shell', 'does not run it') and alternative tools it is not. Mode-specific parameter constraints further clarify which arguments apply in each scenario, so an agent can choose correctly without guessing.

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.8/5.0

Scored across 16 tools

Disambiguation5/5

Every tool has a clearly distinct role: overview, content search, path lookup, file read, edit-path resolution, catalog dump, plugin analysis, symbol tracing, planning, patching, scaffolding, validation, or a specific documentation guide. The descriptions actively cross-reference what each tool should not be used for, making misselection unlikely.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern, such as summarize_repo, search_code, find_files, draft_patch, and validate_code. The guide_* and explain_* prefixes create recognizable subfamilies without breaking the overall naming convention.

Tool Count4/5

At 16 tools, the surface is slightly above the ideal 3–15 range, but each tool contributes to the snapshot-inspection and plugin-development workflow. The documentation guides could theoretically be consolidated, but their distinct topics make the count acceptable.

Completeness5/5

The tool set covers the full inspection-to-planning lifecycle: orient, search, read, locate, trace, catalog, plan, patch, scaffold, validate, and consult documentation. Write and execute operations are intentionally excluded as snapshot-only behavior, so the surface has no dead ends for its stated purpose.

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.
    18 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
    A
    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
    B
    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