Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add bitrix24/templates-mcp --skill manage-bx24-template-mcpgit clone --depth 1 https://github.com/bitrix24/templates-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/bitrix24/templates-mcp/manage-bx24-template-mcp)<a href="https://agentmods.dev/skills/bitrix24/templates-mcp/manage-bx24-template-mcp"><img src="https://agentmods.dev/badge/skills/bitrix24/templates-mcp/manage-bx24-template-mcp/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/bitrix24/templates-mcp/manage-bx24-template-mcp"><img src="https://agentmods.dev/badge/skills/bitrix24/templates-mcp/manage-bx24-template-mcp.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00000 | $0.06968 |
| Opus 5 | $0.00000 | $0.03484 |
| Sonnet 5 | $0.00000 | $0.01394 |
| Haiku 4.5 | $0.00000 | $0.00697 |
Grade A, and why
manage-bx24-template-mcp scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 186 lines — stays where its author put it; the contents beside it link to each section on GitHub.
bx24-template-mcp — Agent Skill
Last reviewed: 2026-06-14
You are working on a Bitrix24 MCP server built on Nuxt + @nuxtjs/mcp-toolkit. Read this before making changes.
Project context
- Repo: https://github.com/bitrix24/templates-mcp
- Prod:
<YOUR_PROD_URL>/mcp— replace with your deployed instance URL - Stack: Nuxt 4 (Nitro
node-server),@nuxtjs/mcp-toolkit,@bitrix24/b24jssdk-nuxt - Auth to Bitrix24: incoming webhook (default), or OAuth 2.0 multi-tenant (opt-in, landed —
NUXT_BITRIX24_OAUTH_ENABLED) - Auth from Claude to us: Bearer token via middleware
- Deployment: Docker behind
nginx-proxy+acme-companionon sharedproxy-netnetwork. CI builds and pushes the image to GHCR onv*tag; the operator deploys via Watchtower in monitor-only mode by default (it notifies on a new:latestbut does NOT restart — opt into auto-apply by removingWATCHTOWER_MONITOR_ONLY) or viamake redeployon the host (manual) - Dependency updates: npm & GitHub Actions — Renovate Bot (see
renovate.json); Dockerfile base images — Dependabot; docker-compose infra images — Renovate'sdocker-composemanager (seerenovate.json). Transitive-dependency security advisories are patched manually viaoverridesinpnpm-workspace.yaml(pnpm v11 location) — Dependabot/Renovate don't open PRs for nested deps. A blockingpnpm audit --audit-level=moderateCI job guards against regressions. - License: MIT
Ground rules
- One tool per file in
server/mcp/tools/<group>/<name>.ts. Discovery is automatic. - Never call Bitrix24 directly. Always go through
useBitrix24Tenant()(the OAuth-aware dispatcher in~/server/utils/bitrix24-tenant— see../../docs/OAUTH-DESIGN.md§6). WithNUXT_BITRIX24_OAUTH_ENABLED=false(the production default) it falls back to the webhook singleton, so behaviour is byte-identical to a directuseBitrix24()call. When the flag is on, the same call resolves to a per-tenantB24OAuthfrom the request-scoped ALS. Never calluseBitrix24()directly from a tool handler — it bypasses the dispatcher and pins the tool to webhook forever. From the dispatcher result go through the typed helpers inserver/utils/sdk-helpers.ts:callV2<T>(b24, method, params, errorContext)— the default for classic methods (tasks.task.add/list/update/+ the seven lifecycle verbs,user.*,task.commentitem.*, …),callV3<T>(…)— only for methods that are v3-only (currentlytasks.task.get,tasks.task.result.*), andbatchV2<T>/batchV3<T>(b24, calls, errorContext)for bulk operations. See the transport-convention block at the top ofsdk-helpers.tsfor how to pick v2 vs v3. The helpers own theisSuccess/getErrorMessages/ transport-error funnel — tool handlers stay short and uniform. Callingb24.actions.*.{call,batch}.makedirectly from a tool handler is forbidden (it duplicates that funnel and drifts over time); the deprecatedb24.callMethodis doubly forbidden — it disappears in SDK 2.0. Seeadding-tools.mdfor the canonical template. - Every tool must have a unit test in
tests/unit/tools/<group>/<name>.test.tswith the Bitrix24 client mocked. - Every Zod field must have
.describe()— the LLM reads it at runtime. - No secrets in code or tests. Use
useRuntimeConfig()and.env. When you add/rename/remove aNUXT_*/NITRO_*variable, change the default port or/mcpendpoint, change the connector auth header name/format, alter required webhook scopes, or add a tool needing upfront-seeded portal data, also update the manual-QA scaffold at../run-manual-qa/references/issue-scaffold.mdin the same PR — it mirrors these structural facts. A CI gate enforces the.env.example↔ scaffold pairing. - Operators talk in names, not ids. When a tool needs a
responsibleId/userId/ similar, resolve from a name first viab24_user_find. The decision tree:- Run
b24_user_find { query: "<name from the operator>" }. - 0 matches → tell the operator nobody matched and ask for a fuller name or last name.
- 1 match → use that user's
id. No further questions. - N > 1 matches → ask the operator to disambiguate by last name (and
position/departmentif last names also collide). Only ask for a numericidas the last resort if natural-language disambiguation fails.
- Run
- Default to REST API v2; reach for v3 only where the method is v3-only. Bitrix24's migration to rest-v3 is gradual and will take a long time, so classic methods (
tasks.task.add/list/update/+ the seven lifecycle verbs,user.*,task.commentitem.*,task.checklistitem.*,task.elapseditem.*,task.dependence.*— modify only) all go throughcallV2/batchV2. The two transports are NOT interchangeable: a classic method on v3 fails withUNKNOWNDTOPROPERTYEXCEPTION(wrong field casing) or "restApi:v3 not support method". Use v3 (callV3; apidocs URLs containingrest-v3/or/rest/api/, camelCase DTOs) ONLY for methods that have no working v2 form — currentlytasks.task.getandtasks.task.result.*. Dependency read-back is unavailable:task.item.getdependsonis documented as deprecated upstream and the live-portal smoke (issue #33, 2026-05) confirmed it no longer returns predecessors;tasks.task.getdoes not expose adependsOnfield via any documented select. No tool ships for this — operators inspect dependencies via the Bitrix24 UI until upstream restores a read path. Bitrix24's v3tasks.template.checklist.*is for task templates only; it does NOT replacetask.checklistitem.*for actual tasks. When unsure which transport a method needs, check apidocs (a/rest/api/URL + camelCase fields = v3) and default to v2 otherwise. - Read the SDK before reinventing it. Before adding rate limiting, retry, logging, request inspection, or any other cross-cutting concern around Bitrix24 calls — read
@bitrix24/b24jssdk'sdist/esm/index.d.tsfor first-class extension points. The SDK already ships a leaky-bucketRestrictionManager(configured viasetRestrictionManagerParams+ParamsFactory), retry with adaptive delay, structured logging (setLogger), andgetStats(). Monkey-patching is forbidden (see "Things you must NOT do" below). When in doubt, search the.d.tsforset*/add*/on*/*Manager/*Factory— that's where the hooks live. - Every destructive tool requires an explicit
confirmDelete: truefrom the agent (UNIVERSAL gate). Deletion is irreversible from the MCP's side — Bitrix24 does not surface a "trash" or "undo" for the entities we expose. The rule applies to ANY tool whose primary effect is to wipe an existing record — whether the trailing action is_delete(most common),_remove(removes a link / relationship without deleting either endpoint, e.g.b24_task_dependency_remove), or any future synonym. To prevent LLM mis-interpretation ("посмотри запись 5" → tool ending in_deleteinstead of_list), every such tool MUST add aconfirmDelete: booleanfield to its Zod schema and refuse withBitrix24ToolErrorcodeDELETE_NEEDS_CONFIRMunless the agent set it totrue. The error message MUST name the target(s) so the agent shows the operator what they're agreeing to. Applies to BOTH single and batch — the confirm is per-call, not per-id, and the agent MUST receive explicit operator agreement (the operator says "да, удали"; "посмотри" is not consent) before setting the flag — even in batch. Auto-confirming defeats the gate and counts as a Rule #9 violation. The shared schema fragment lives atserver/utils/define-action-tool.ts(confirmDeleteSchema()); use it directly to keep wording uniform across delete tools. The shared gateassertConfirmedDelete(toolName, targetDescription, confirmed)lives in the same file (closes #32) — call it from every*_delete/*_removetool handler instead of re-implementing the refusal; each callsite formats its owntargetDescriptionso the LLM sees a domain-specific message. Compliant tools:b24_task_elapsed_time_delete(PR #28),b24_task_result_delete(PR #31),b24_task_checklist_item_delete(PR #31; stacks with Rule #10 below),b24_task_dependency_remove(PR-C).
What ships with it
2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 186 lines · 0 tokens per session scan A 156ceb22f5d1
manage-bx24-template-mcp is a skill published in the GitHub repository bitrix24/templates-mcp (6 stars, last pushed 2mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 6,968 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
manage-mcp
Manage MCP servers in Nuxt with @nuxtjs/mcp-toolkit — setup, create tools/resources/prompts, organize with handlers, build interactive MCP Apps, add elicitation/logging/sessions, review, and troubleshoot.
design-mcp-server
Design the tool surface, resources, and service layer for a new MCP server. Use when starting a new server, planning a major feature expansion, or when the user describes a domain/API they want to expose via MCP. Produces a design doc at docs/design.md that drives implementation.
api-telemetry
Catalog of OpenTelemetry instrumentation built into framework @cyanheads/mcp-ts-core — spans, metrics, completion logs, env config, runtime caveats, custom instrumentation patterns, and cardinality rules. Use when enabling OTel export, adding custom spans or metrics in services, debugging missing telemetry, looking up…
api-mirror
Stand up a persistent, self-refreshing local mirror of a bulk upstream dataset with the MirrorService (@cyanheads/mcp-ts-core/mirror). Use when a server wraps a large or slow API and should query a synced local index (embedded SQLite + FTS5) instead of paginating the live API per request.
api-services
API reference for built-in service providers (LLM, Speech, Graph). Use when looking up service interfaces, provider capabilities, or integration patterns.
cmdb-patterns
Create ServiceNow CIs and cmdbrelci relationships, walk upstream/downstream impact, detect orphan/stale CIs, and align discovered CIs with the proper sysclassname hierarchy.