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 cyanheads/calculator-mcp-server --skill add-resourcegit clone --depth 1 https://github.com/cyanheads/calculator-mcp-serverWrote 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/cyanheads/calculator-mcp-server/add-resource)<a href="https://agentmods.dev/skills/cyanheads/calculator-mcp-server/add-resource"><img src="https://agentmods.dev/badge/skills/cyanheads/calculator-mcp-server/add-resource/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/cyanheads/calculator-mcp-server/add-resource"><img src="https://agentmods.dev/badge/skills/cyanheads/calculator-mcp-server/add-resource.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.00032 | $0.02848 |
| Opus 5.5 | $0.00013 | $0.01139 |
| Sonnet 5.5 | $0.00006 | $0.00570 |
| Haiku 4.5 | $0.00003 | $0.00285 |
Grade A, and why
add-resource 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 18d 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.
This is a copy
100% identical to add-resource — 0 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 228 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Context
Resources use the resource() builder from @cyanheads/mcp-ts-core. Each resource lives in src/mcp-server/resources/definitions/ with a .resource.ts suffix. The standard registration pattern uses a definitions/index.ts barrel that collects all resources into an allResourceDefinitions array for createApp(). Fresh scaffolds start with direct imports in src/index.ts — the barrel is introduced as definitions grow. Match the pattern already used by the project you're editing.
Tool coverage. Not all MCP clients expose resources — many are tool-only (Claude Code, Cursor, most chat UIs). Before adding a resource, verify the same data is reachable via the tool surface — either through a dedicated tool, included in another tool's output, or bundled into a broader tool. A resource whose data has no tool path is invisible to a large share of agents.
Steps
- Gather the resource's URI template, purpose, and data shape from the user's request — ask only if genuinely absent
- Design the URI — use
{paramName}for path parameters (e.g.,myscheme://{itemId}/data) - Create the file at
src/mcp-server/resources/definitions/{{resource-name}}.resource.ts - Register the resource in the project's existing
createApp()resource list (directly insrc/index.tsfor fresh scaffolds, or via a barrel if the repo already has one) - Run
bun run devcheckto verify - Smoke-test with
bun run rebuild && bun run start:stdio < /dev/null(orstart:http) — theCore services constructedlog record must list the new resource in itsresourcesfield (the message text shows only counts); if it doesn't, the resource never reachedcreateApp()
Template
/**
* @fileoverview {{RESOURCE_DESCRIPTION}}
* @module mcp-server/resources/definitions/{{RESOURCE_NAME}}
*/
import { resource, z } from '@cyanheads/mcp-ts-core';
export const {{RESOURCE_EXPORT}} = resource('{{scheme}}://{{{paramName}}}/data', {
description: '{{RESOURCE_DESCRIPTION}}',
mimeType: 'application/json',
// size: 1024, // optional: content size in bytes, if known
params: z.object({
{{paramName}}: z.string().describe('{{PARAM_DESCRIPTION}}'),
}),
// auth: ['resource:{{resource_name}}:read'],
async handler(params, ctx) {
ctx.log.debug('Fetching resource', { {{paramName}}: params.{{paramName}} });
// Pure logic — throw on failure, no try/catch
return { /* resource data */ };
},
list: async (extra) => ({
resources: [
{
uri: '{{scheme}}://all',
name: '{{RESOURCE_LIST_NAME}}',
mimeType: 'application/json',
},
],
}),
});
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.
- 18d ago Changed · +2 lines fa4f9e075576
- 1mo ago Changed 3bd24c2e57f2
- 1mo ago First seen · 226 lines · 32 tokens per session scan A bd2b36cc23dc
add-resource is a skill published in the GitHub repository cyanheads/calculator-mcp-server (2 stars, last pushed yesterday), licensed Apache-2.0. It adds 32 tokens to every session and 2,848 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. It is 100% identical to add-resource, differing in 0 lines, and is treated as a copy.
Other skills, from other repositories
adeu-redlining
Use this skill when reviewing, editing, redlining, or negotiating an existing Microsoft Word document (.docx) — including proposing edits as tracked changes, accepting or rejecting existing tracked changes, replying to comments, comparing two versions, sanitizing author metadata, or finalizing a contract for…
lsp-mcp-server
Use with Codex, Claude Code, or another MCP client when lsp-mcp-server is connected and semantic code navigation, analysis, refactoring, or diagnostics are needed. Covers all 29 lsp tools for TypeScript, Python, Rust, Go, C/C++, Ruby, PHP, Elixir, Kotlin, Java, and user-configured languages. Prefer these tools to text…
lain
Structural code intelligence for AI coding agents. Use this skill when the user wants to understand how a codebase is organized (modules, call graphs, file dependencies), find where to start reading, trace the impact of a change, find code by meaning, or understand what a symbol does in its full context. Do NOT use…
wiki
Rebuild a flow-first project wiki using the mimirs wiki MCP tool. Use when the user asks to generate, rebuild, refresh, or write the wiki for a codebase.
lain-coordination
Use when working alongside other agents with Lain — "claim these files", "who else is here", "will we collide", "leave a note for the next agent", "what happened while I was away". Covers the session, social, and notes packages.
plan
Design an implementation plan before writing code — where the change lands, what it will touch, what could break, and the steps in order. Use when asked to plan a feature, scope a change, or figure out how to approach an edit before making it. To assess a change that already exists (a diff, refactor, or rename), use…