Borrowing it
Nothing to install: this file belongs to Haris0059/ibu-mcp. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/Haris0059/ibu-mcp/main/.claude/skills/add-ibu-tool/SKILL.mdgit clone --depth 1 https://github.com/Haris0059/ibu-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/haris0059/ibu-mcp/add-ibu-tool)<a href="https://agentmods.dev/skills/haris0059/ibu-mcp/add-ibu-tool"><img src="https://agentmods.dev/badge/skills/haris0059/ibu-mcp/add-ibu-tool/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/haris0059/ibu-mcp/add-ibu-tool"><img src="https://agentmods.dev/badge/skills/haris0059/ibu-mcp/add-ibu-tool.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.00041 | $0.00591 |
| Opus 5 | $0.00020 | $0.00296 |
| Sonnet 5 | $0.00008 | $0.00118 |
| Haiku 4.5 | $0.00004 | $0.00059 |
Grade A, and why
add-ibu-tool 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 — 54 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Adding a new IBU MCP tool
Follow these steps to add a tool. Match the patterns already in src/tools/*.ts rather than inventing new ones.
1. Pick the domain file
Existing files in src/tools/: student.ts, grades.ts, attendance.ts, notifications.ts, finances.ts, activities.ts. If the new tool fits one of these domains, append to its exported array. Only create a new file for a genuinely new domain.
2. Name the tool
Use the ibu_<verb>_<noun> convention (e.g. ibu_get_transcript, ibu_mark_notification_read). The name is what shows up to Claude — make it specific and discoverable.
3. Define the entry
Each tool is an object in the domain array with this shape:
{
name: "ibu_get_something",
description: "One sentence describing what it returns and when to use it.",
inputSchema: {
type: "object",
properties: {
// string params; use `enum` for fixed sets; add `description` for each
academicYearId: { type: "string", description: "Academic year ID from ibu_get_academic_years." },
},
required: [],
},
handler: async (input: { academicYearId?: string }) => {
const data = await ibufetch(`some/path${input.academicYearId ? `?yearId=${input.academicYearId}` : ""}`);
return JSON.stringify(data, null, 2);
},
}
The registrar in src/index.ts converts inputSchema.properties into zod — it currently handles string/enum only. If the new tool needs a non-string param, extend the registrar accordingly.
4. Register
If you added to an existing file, no registration change is needed (the array is already imported in src/index.ts). If you created a new file, import its array in src/index.ts and add a registerTools(...) call alongside the others.
5. Verify
Run npm run build. The TS config is strict — fix any errors before reporting done. Do not add console.log to stdout (it breaks the stdio MCP channel — use console.error if you need debug output).
6. Error handling
Let ibufetch() raise. It already maps 401/402/403/301/500 to user-facing messages. Don't wrap the call in try/catch unless you have a tool-specific recovery path.
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 · 54 lines · 41 tokens per session scan A 23fef752e118
add-ibu-tool is a skill published in the GitHub repository Haris0059/ibu-mcp (2 stars, last pushed 3mo ago), licensed MIT. It adds 41 tokens to every session and 591 once invoked, about $0.0002 per session on Opus 5. 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
cloudkit-sync
Generate CloudKit sync infrastructure using CKSyncEngine with conflict resolution, sharing, and account monitoring. Use when adding iCloud sync to an iOS/macOS app.
offline-queue
Generates an offline operation queue with persistence, automatic retry on connectivity, and conflict resolution. Use when user needs offline-first behavior, queued mutations, or pending operations that sync when back online.
push-notifications
Generate push notification infrastructure with APNs registration, handling, and rich notifications. Use when adding push notifications, configuring APNs, notification categories/actions, or rich notifications with images and custom UI.
http-cache
Generates an HTTP caching layer with Cache-Control parsing, ETag/conditional requests, and offline fallback. Use when user wants to add response caching, offline support, or reduce API calls.
pagination
Generates pagination infrastructure with offset or cursor-based patterns, infinite scroll, and search support. Use when user wants to add paginated lists, infinite scrolling, or load-more functionality.
networking-layer
Generates a protocol-based networking layer with async/await, error handling, and swappable implementations. Use when user wants to add API client, networking, or HTTP layer.