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 agentmods add instructions/borjanebbal/genomics-mcp/agents-mdgit clone --depth 1 https://github.com/borjanebbal/genomics-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/instructions/borjanebbal/genomics-mcp/agents-md)<a href="https://agentmods.dev/instructions/borjanebbal/genomics-mcp/agents-md"><img src="https://agentmods.dev/badge/instructions/borjanebbal/genomics-mcp/agents-md.svg" alt="Measured on agentmods" 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.02846 | $0.02846 |
| Opus 5 | $0.01423 | $0.01423 |
| Sonnet 5 | $0.00569 | $0.00569 |
| Haiku 4.5 | $0.00285 | $0.00285 |
Grade A, and why
genomics-mcp AGENTS.md 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 5d 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 — 198 lines — stays where its author put it; the contents beside it link to each section on GitHub.
AGENTS.md — AI Agent Instructions
Project Overview
This is an MCP (Model Context Protocol) server written in TypeScript that exposes genomics SNP data to LLM clients. It is a read-only data service — no mutations, no user accounts, no authentication.
Tech Stack
- Runtime: Bun
- Language: TypeScript (strict mode)
- MCP SDK:
@modelcontextprotocol/sdkv1.x — useserver.registerTool(name, { inputSchema: Schema.shape }, handler)API - Validation: Zod 4.x
- Linter/Formatter: Biome (
biome.jsonat project root) - Build: Bun runs TypeScript directly —
tscis available for type-checking only (tsconfig.jsonat project root)
Key Architecture Rules
- stdout is sacred. All log output MUST go to stderr. Use
createLogger()fromsrc/utils/logger.ts— never useconsole.log()orconsole.error()directly. - Repository Pattern. All data access goes through
ISnpRepository. Never read JSON files directly in services or tools. - Use-case classes. Business logic lives in
src/services/*.use-case.ts. TheSnpServicefacade delegates to them. Exception:listTraits()andgetMetadata()onSnpServicecall the repository directly (no use-case class) because they contain no business logic —getMetadata()enriches the repository'sgetStats()result with the applicationVERSION. - One tool per file. Each MCP tool is defined in
src/tools/*.tool.ts. The barrelregister-all.tswires them together. - Zod schemas are the source of truth for both runtime validation and TypeScript types (via
z.infer).
File Layout
genomics-mcp/
├── package.json # Scripts, dependencies (Bun runtime)
├── tsconfig.json # Strict mode, noEmit, excludes tests/
├── biome.json # Linter + formatter config
├── bun.lock # Lockfile
├── AGENTS.md # AI agent instructions (this file)
├── README.md # Project overview and quick-start
├── LICENSE # MIT
│
├── docs/
│ ├── ARCHITECTURE.md # Design decisions, data flow, known limitations
│ ├── PROJECT_STATUS.md # Health metrics, resolved items, pending features
│ ├── TESTING.md # Automated + manual testing guide
│ └── TOOLS.md # MCP tool reference (inputs, outputs, examples)
│
├── src/
│ ├── index.ts # Entry point — wires server, repository, service, tools
│ ├── constants.ts # Shared limits, patterns, defaults
│ │
│ ├── types/ # TypeScript types (derived from Zod schemas via z.infer)
│ │ ├── common.ts # PaginationMetadata, MatchMode, ResponseFormat, RiskLevel, StudyType
│ │ ├── snp.ts # SnpRecord, SnpSummary, TraitSummary, DatasetStats, DatasetMetadata, GenotypeInterpretation
│ │ └── trait-categories.ts # TraitCategory const/type, TRAIT_CATEGORIES slug→category map
│ │
│ ├── schemas/ # Zod schemas — source of truth for validation and types
│ │ ├── snp.schemas.ts # Domain schemas — validates seed data on startup
│ │ └── tool-inputs.schemas.ts # MCP tool input schemas
│ │
│ ├── repositories/ # Data access layer
│ │ ├── snp.repository.ts # ISnpRepository interface
│ │ ├── snp.json-repository.ts # JSON/in-memory implementation
│ │ └── data/
│ │ └── snps.json # Seed data (validated by Zod on startup)
│ │
│ ├── services/ # Business logic
│ │ ├── snp.service.ts # Facade — delegates to use-case classes
│ │ ├── get-snp-details.use-case.ts
│ │ ├── interpret-genotype.use-case.ts
│ │ └── search-by-trait.use-case.ts
│ │
│ ├── tools/ # MCP tool registrations (one tool per file)
│ │ ├── register-all.ts # Barrel — imports and registers all tools
│ │ ├── get-metadata.tool.ts
│ │ ├── get-snp-details.tool.ts
│ │ ├── interpret-genotype.tool.ts
│ │ ├── list-traits.tool.ts
│ │ └── search-by-trait.tool.ts
│ │
│ └── utils/ # Shared utilities
│ ├── logger.ts # Stderr-only logger (stdout is reserved for MCP)
│ ├── genotype.ts # Allele normalization (canonical sort)
│ ├── errors.ts # Error message helpers
│ └── formatting.ts # Markdown/JSON response formatters
│
└── tests/ # Mirrors src/ — Bun native test runner (bun:test)
├── utils/
│ ├── genotype.test.ts # normalizeGenotype() — all allele combos, case handling
│ ├── errors.test.ts # createSnpNotFoundMessage(), createGenotypeNotFoundMessage()
│ └── formatting.test.ts # All 5 formatters, pagination, empty results, truncation
├── schemas/
│ └── snp.schemas.test.ts # Valid/invalid domain data, canonicalisation transform
├── repositories/
│ └── snp.json-repository.test.ts # Full repository lifecycle, all query methods, error paths
├── services/
│ ├── mock-repo.ts # Shared in-memory ISnpRepository mock + fixture SNPs
│ ├── snp.service.test.ts
│ ├── get-snp-details.use-case.test.ts
│ ├── interpret-genotype.use-case.test.ts
│ └── search-by-trait.use-case.test.ts
└── tools/
├── fixtures.ts # Shared InMemoryTransport + real repo/service/server/client harness
├── get-metadata.tool.test.ts
├── get-snp-details.tool.test.ts
├── interpret-genotype.tool.test.ts
├── list-traits.tool.test.ts
└── search-by-trait.tool.test.ts
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.
- 5d ago First seen · 198 lines · 2,846 tokens per session scan A 95a65b81cda7
genomics-mcp AGENTS.md is an instructions file published in the GitHub repository borjanebbal/genomics-mcp (0 stars, last pushed 6mo ago), licensed MIT. It adds 2,846 tokens to every session, about $0.0142 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 instructions, from other repositories
nutrition-mcp CLAUDE.md
Claude Code instructions for akutishevsky/nutrition-mcp, covering claude.md, project overview, deploying, publishing to the registry and commands.
memex AGENTS.md
AGENTS.md instructions for timurgaleev/memex, covering agents.md — working in this repo as an ai agent, tl;dr, required workflow — run the skill for every change, build & test (memex) and cli commands worth knowing.
memex CLAUDE.md
Claude Code instructions for timurgaleev/memex, covering claude.md — rules for ai agents working in this repo, what you are allowed to do, destructive infrastructure changes, file and git operations and scope of work.
clingen-link CLAUDE.md
Claude Code instructions for berntpopp/clingen-link, a project described as: MCP server for ClinGen (Clinical Genome Resource): gene–disease validity, dosage sensitivity, clinical actionability, and expert-panel variant pathogenicity (ERepo) — as typed tools for LLM agents.
numera-mcp AGENTS.md
AGENTS.md instructions for vectojs/numera-mcp: This repository owns only the stdio Model Context Protocol adapter and its safe filesystem boundary. Workbook semantics remain in exact-pinned Numera Core and XLSX packages.
nonprofit-explorer-mcp-server AGENTS.md
AGENTS.md instructions for cyanheads/nonprofit-explorer-mcp-server, covering developer protocol, core rules, patterns, tool and server instructions.