lampa-mcp-server
This MCP server provides AI agents with structured, read-only access to the Lampa TV app source code, enabling deep understanding, planning, and code generation for Lampa development.
Repository Exploration
Summarize structure, list modules/files/scripts, search code with regex, read file segments.Feature & Architecture Analysis
Locate feature-specific files, map module dependencies and reverse dependencies, conduct impact and risk scans, deep‑analyze plugins and components, extract the full Lampa API surface, storage schema, network map, and UI templates.Event & Data Flow
Trace events to emitters/listeners, map the event bus, and follow data flows.Settings, API & Style Lookup
Find settings registrations, external API calls, styles per module, translation keys, and coverage gaps; list streaming providers and extract template HTML.Planning & Code Generation
Generate step‑by‑step feature plans, suggest optimal edit targets, draft patches, insert hooks, add setting boilerplate, scaffold entire plugins, and generate ready‑to‑use plugin code.Validation & Quality
Validate plugins against conventions, run code‑quality checks (TODOs, console.logs, missing translations), find related tests, get build hints, and perform documentation lookups.
All tools are read‑only and designed for intelligent code discovery, analysis, and assisted Lampa app development.
Provides reference guidance for integrating Lampa with Jellyfin's content API, helping plugin authors use Jellyfin as a third-party content provider.
Provides reference guidance for integrating Lampa with Kinopoisk's content API, helping plugin authors use Kinopoisk as a third-party content provider.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lampa-mcp-serverList all streaming providers in the codebase"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
lampa-mcp-server
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
/mcpwith 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 |
| Snapshot metadata, tree, scripts, optional module listing |
| Content/regex search |
| Paths by name, feature, UI, styles, or specs |
| File / core module / template bytes |
| One plugin folder (+ load path if name omitted) |
| Catalogs (API, events, storage, Maker, …) |
| Follow one event, component, file, or deprecated API |
| Plugin docs, patterns, packaging |
| Plan + targets + impact + risks |
| Suggested diffs (does not write) |
| New plugin / setting / hook text (does not write) |
| Plugin score, grep, i18n, build hint |
| CUB APIs as used in Lampa source |
| Authoritative |
| Third-party content APIs (TMDB, KinoPoisk, Alloha, MDBList, Jackett, TorrServer, Jellyfin) |
| 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_codeUse 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 startClaude 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_KVPut 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,coworker3. 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:uploadObjects land under lampa/manifest.json, lampa/bundle.json (all source text), and lampa/indexes/*.json.
4. Deploy
npm run types:worker
npm run deployMCP 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:workerThen point the MCP inspector / client at http://localhost:8787/mcp with Authorization: Bearer <pat>.
Recommended agent workflow
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_codePlugin 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.jsoncDevelopment
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:uploadDependencies (what / why)
Package | Role |
| MCP SDK (stdio + shared server factory) |
| Workers MCP handler ( |
| Worker auth wrapper (PAT via |
| Public HTML routes ( |
| Tool input schemas |
| TypeScript 6 compiler + types for |
| Deploy, |
| Lint / format |
Runtime deps ship with both the stdio CLI and the Worker. Dev deps are local-only.
License
MIT
Available Tools
16 toolsanalyze_pluginAnalyze one Lampa plugin folderARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| plugin | No | Case-sensitive plugins/ directory name (not a manifest id), e.g. 'online', 'iptv', 'collections'. Omit for load-path only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 diffARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | The change to implement. | |
| plan_context | No | Optional paste of plan_change output. Recommended; the tool still runs without it. | |
| target_files | No | Repo-relative files to patch. If omitted, up to 5 files are inferred from request (weaker than plan_context). |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 packagingARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | For plugin_docs: docs language. Default en. | |
| mode | Yes | plugin_docs=docs/en|ru; pattern=guide+live examples; packaging=gulp/npm targets. | |
| query | No | For plugin_docs: search headings/body when chapter is omitted. Also used as fallback topic. | |
| chapter | No | For plugin_docs: chapter id or alias (pitfalls, settings, player, 01–13). | |
| pattern | No | For mode=pattern: which development pattern to explain. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 featureARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| ext | No | For mode=name only: extension filter, e.g. '.js' or '.scss'. Ignored otherwise. | |
| mode | No | 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. | |
| query | Yes | Filename substring (mode=name), feature name (mode=feature, e.g. player/catalog/iptv), UI component, style module, or spec keyword. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 LampaARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | For topic=endpoint: path such as 'bookmarks/dump' or 'device/add'. | |
| model | No | For topic=models: which schema. Default all. | |
| topic | Yes | catalog=endpoint table; endpoint=one path; auth=login/headers; models=schemas; sync=dump/changelog; timeline_hash=hash algorithm. | |
| search | No | For topic=catalog: filter by path substring. | |
| example | No | For topic=timeline_hash: worked example. | |
| category | No | For topic=catalog: filter by API category. Default all. | |
| auth_focus | No | For topic=auth: focus area. Default overview. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 pluginsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | providers=list/search all providers; provider_detail=one provider's auth/storage/usage; proxy_pattern=shared CORS/credential-hiding Worker design. | |
| search | No | For topic=providers only: filter by id, name, category, or description substring. | |
| provider | No | Required for topic=provider_detail, e.g. 'tmdb', 'kinopoisk_unofficial', 'alloha', 'mdblist', 'jackett', 'torrserver'. Ignored otherwise. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 catalogARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | manifest=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
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 indexesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Filter the chosen catalog only (not a repo-wide search): API module, event name, storage key, component name, flag keyword, or folder (for network). | |
| scope | No | For api_surface, events, storage: limit the tree. Default all. | |
| topic | Yes | Which catalog: api_surface | events | storage | network | settings | providers | maker | socket | activity | flags | content_rows | favorites | mirrors. | |
| detail | No | For topic=events: include per-file listener/emitter lists. Default false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 changeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Plain-language description of the change, e.g. 'add a sleep timer to the player'. | |
| scope_hint | No | Optional hint for which feature area is involved, e.g. 'player' or 'plugins/iptv'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 bytesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Repo-relative path, core module name (kind=core), or template name (kind=template). Required for kind=file. | |
| kind | No | file (default)=any path; core=src/core module; template=src/templates markup. | |
| end_line | No | Last line to read (inclusive). Pair with start_line. | |
| max_lines | No | Cap when reading a full file. Default 300. Ignored when start_line/end_line are set. | |
| start_line | No | First line to read (1-based). Pair with end_line. | |
| template_mode | No | For kind=template: list catalog, html markup, or raw JS. Default list when file omitted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 pathARead-onlyIdempotent
Map a change kind (lang, sass, template, component, plugin, core, interaction, settings) to the authoritative src/ or plugins/ path and list generated public/build copies to avoid. Call this before plan_change or draft_patch; unlike find_files, this is a fixed landmark table look-up (no filesystem walk, no content search), not a search.
Example: kind=plugin name='tracks' returns plugins/tracks specifically, vs kind=lang name='en' returns src/lang/en.js; an unrecognized name does not fail — it falls back to the kind's default authoritative/avoid paths so the call always returns something actionable.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | What kind of source you intend to change. | |
| name | No | Optional plugin id (e.g. 'tracks') or lang code (e.g. 'en'). Unknown values still return the kind's default paths. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 textARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | For kind=setting: Storage key, e.g. 'myplugin_enabled'. Prefix with plugin name. | |
| kind | Yes | plugin=full main.js scaffold; setting=SettingsApi snippet; hook=Listener catalog. | |
| type | No | For kind=setting: param type. toggle aliases trigger. | |
| label | No | For kind=setting: human-readable UI label. | |
| options | No | For kind=setting type=select: option ids. | |
| trigger | No | For kind=hook: event or lifecycle moment, e.g. 'player start', 'app ready', 'card full'. | |
| component | No | For kind=setting: Settings section id. Defaults to key prefix before '_'. | |
| description | No | For kind=plugin: one-sentence description of what the plugin does. | |
| plugin_kind | No | For kind=plugin: screen (default) | player | context-menu | settings-only. | |
| plugin_name | No | For kind=plugin: snake_case folder/id, e.g. 'my_feature'. | |
| default_value | No | For kind=setting: default value. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 contentsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| globs | No | Extension globs to restrict search, e.g. ['*.js','*.ts']. When omitted, searches .js/.ts/.css/.scss/.html/.json. | |
| query | Yes | Literal substring (default, case-sensitive) or regex when regex=true. | |
| regex | No | If true, compile query as a JS RegExp with no extra flags (no implicit case-insensitive). Default false (literal). | |
| prefix | No | Repo-relative folder to walk, e.g. 'src' or 'plugins/iptv'. Combines with globs (prefix walks, globs filter extensions). |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 layoutARead-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).
| Name | Required | Description | Default |
|---|---|---|---|
| subfolder | No | Repo-relative prefix whose JS/TS files to list recursively, e.g. 'src/components'. Omit for the compact overview. Unknown folder → error. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 codeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | event=Listener bus; lifecycle=component contract; deps=import blast radius; api_calls=external fetches; upgrade=scan a file for 2.x→Maker APIs. | |
| target | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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 buildARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| key | No | For mode=i18n: specific translation key. Omit for coverage report. | |
| goal | No | For mode=build: which command to hint (does not execute). Default build. | |
| mode | Yes | plugin=convention score; grep=snapshot quality scans (not a shell); i18n=keys/coverage; build=command hint (does not run npm/gulp). | |
| checks | No | For mode=grep: which checks. Defaults to all. | |
| target | No | Required for mode=plugin: plugin folder name or repo-relative JS path. Missing plugin → error listing folders. | |
| show_missing | No | For mode=i18n coverage: include missing/extra key lists. Default true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| markdown | Yes | Human-readable markdown report. Always present, including empty-result cases. Does not write files. |
TDQS
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.
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.
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.
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.
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.
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.
2 tool updates
v1.9.0- Added
guide_external_api - Added
guide_plugin_catalog
13 tool updates
v1.8.0- Added
analyze_plugin - Removed
cub_guide - Added
explain_docs - Removed
explain_lampa - Added
guide_cub - Added
list_catalog - Removed
map_lampa - Removed
plugin_deep_dive - Removed
repo_overview - Changed
search_code1 field changed- changed
Input schema / properties / prefix / descriptionPrevious 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)."
- Added
summarize_repo - Removed
trace_lampa - Added
trace_symbol
8 tool updates
v1.7.0- Changed
draft_patch2 fields changed- changed
Input schema / properties / plan_context / descriptionPrevious 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." - changed
Input schema / properties / target_files / descriptionPrevious 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)."
- Changed
find_files3 fields changed- changed
Input schema / properties / ext / descriptionPrevious 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." - changed
Input schema / properties / mode / descriptionPrevious 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." - changed
Input schema / properties / query / descriptionPrevious 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."
- Changed
map_lampa1 field changed- changed
Input schema / properties / query / descriptionPrevious 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)."
- Changed
repo_overview1 field changed- changed
Input schema / properties / subfolder / descriptionPrevious 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."
- Changed
resolve_edit_path1 field changed- changed
Input schema / properties / name / descriptionPrevious 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."
- Changed
search_code4 fields changed- changed
Input schema / properties / globs / descriptionPrevious 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." - changed
Input schema / properties / prefix / descriptionPrevious 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." - changed
Input schema / properties / query / descriptionPrevious value: -"Text or regex to search for in file contents."New value: +"Literal substring (default, case-sensitive) or regex when regex=true." - changed
Input schema / properties / regex / descriptionPrevious 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)."
- Changed
trace_lampa2 fields changed- changed
Input schema / properties / mode / descriptionPrevious 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." - changed
Input schema / properties / target / descriptionPrevious 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."
- Changed
validate_code3 fields changed- changed
Input schema / properties / goal / descriptionPrevious value: -"For mode=build: which command to hint. Default build."New value: +"For mode=build: which command to hint (does not execute). Default build." - changed
Input schema / properties / mode / descriptionPrevious 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)." - changed
Input schema / properties / target / descriptionPrevious 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."
50 tool updates
v1.6.0- Removed
add_setting - Removed
component_lifecycle - Added
cub_guide - Removed
doc_lookup - Changed
draft_patch4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / plan_context / descriptionPrevious value: -"Paste the output of plan_feature_change here for best results."New value: +"Paste the output of plan_change here for best results." - changed
Input schema / properties / target_files / descriptionPrevious value: -"Files to focus on (repo-relative paths)."New value: +"Files to focus on (repo-relative paths). Inferred from request if omitted." - changed
Output 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" +}
- Added
explain_lampa - Removed
explain_lampa_pattern - Removed
extract_template_html - Removed
find_api_calls - Removed
find_feature - Changed
find_files7 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / ext / descriptionPrevious value: -"File extension filter, e.g. '.js', '.scss'."New value: +"For mode=name only: extension filter, e.g. '.js' or '.scss'." - added
Input schema / properties / modeAdded 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" +} - removed
Input schema / properties / patternRemoved value: -{ - "description": "Substring or glob pattern to match against file names.", - "type": "string" -} - added
Input schema / properties / queryAdded value: +{ + "description": "Filename substring, feature name, UI component, style module, or spec keyword depending on mode.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "pattern" -]New value: +[ + "query" +] - changed
Output 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" +}
- Removed
find_settings - Removed
find_styles_for_module - Removed
find_translation_keys - Removed
find_ui_component - Removed
generate_plugin_boilerplate - Removed
get_core_module - Removed
get_network_map - Removed
get_storage_schema - Removed
impact_analysis - Removed
insert_hook - Removed
lampa_api_surface - Removed
list_all_events - Removed
list_modules - Removed
list_related_tests - Removed
list_scripts - Removed
list_streaming_providers - Removed
list_templates - Added
map_lampa - Removed
module_dependency_map - Added
plan_change - Removed
plan_feature_change - Changed
plugin_deep_dive4 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - changed
Input schema / properties / plugin / descriptionPrevious 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." - removed
Input schema / requiredRemoved value: -[ - "plugin" -] - changed
Output 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" +}
- Removed
read_file - Removed
read_file_segment - Added
read_source - Changed
repo_overview3 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / subfolderAdded value: +{ + "description": "Optional repo-relative folder whose JS/TS modules to list, e.g. 'src/components'. Omit for overview only.", + "type": "string" +} - changed
Output 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" +}
- Added
resolve_edit_path - Removed
risk_scan - Removed
run_build_hint - Removed
run_grep_checks - Added
scaffold_plugin - Removed
scaffold_plugin_integration - Changed
search_code5 fields changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema" - added
Input schema / properties / prefixAdded value: +{ + "description": "Repo-relative folder to search within, e.g. 'src' or 'plugins/iptv'.", + "type": "string" +} - changed
Input schema / properties / query / descriptionPrevious value: -"Text or regex to search for."New value: +"Text or regex to search for in file contents." - changed
Input schema / properties / regex / descriptionPrevious value: -"Treat query as a regex. Default false."New value: +"Treat query as a regex. Default false (literal)." - changed
Output 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" +}
- Removed
suggest_edit_targets - Removed
trace_event - Added
trace_lampa - Removed
translation_coverage - Added
validate_code - Removed
validate_plugin
41 tool updates
v1.0.0- First observed
add_setting - First observed
component_lifecycle - First observed
doc_lookup - First observed
draft_patch - First observed
explain_lampa_pattern - First observed
extract_template_html - First observed
find_api_calls - First observed
find_feature - First observed
find_files - First observed
find_settings - First observed
find_styles_for_module - First observed
find_translation_keys - First observed
find_ui_component - First observed
generate_plugin_boilerplate - First observed
get_core_module - First observed
get_network_map - First observed
get_storage_schema - First observed
impact_analysis - First observed
insert_hook - First observed
lampa_api_surface - First observed
list_all_events - First observed
list_modules - First observed
list_related_tests - First observed
list_scripts - First observed
list_streaming_providers - First observed
list_templates - First observed
module_dependency_map - First observed
plan_feature_change - First observed
plugin_deep_dive - First observed
read_file - First observed
read_file_segment - First observed
repo_overview - First observed
risk_scan - First observed
run_build_hint - First observed
run_grep_checks - First observed
scaffold_plugin_integration - First observed
search_code - First observed
suggest_edit_targets - First observed
trace_event - First observed
translation_coverage - First observed
validate_plugin
TDQS
Scored across 16 tools
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.
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.
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.
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
Related MCP Connectors
MIND MCP Server — 31 tools. Persistent AI memory: knowledge graph, LIFE tasks, CRM, 50+ models.
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP 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 npm1MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for local-first code intelligence, providing structural code graph, semantic search, and impact analysis to AI agents.2MIT
- AlicenseNot gradedqualityAmaintenanceA 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.1MIT
- AlicenseNot gradedqualityBmaintenanceMCP 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