{"_id":"@biocontext7/mcp","_rev":"4-4e89031d38bd41310ab9d77bb39dee58","name":"@biocontext7/mcp","dist-tags":{"latest":"1.0.0"},"versions":{"0.1.0":{"name":"@biocontext7/mcp","version":"0.1.0","keywords":["mcp","bioinformatics","biocontext7","context7","claude"],"author":{"name":"Hordago Labs"},"license":"MIT","_id":"@biocontext7/mcp@0.1.0","maintainers":[{"name":"jaureguy760","email":"jeffpjaureguy@gmail.com"}],"homepage":"https://github.com/Hordago-Labs/biocontext7/tree/main/packages/mcp#readme","bugs":{"url":"https://github.com/Hordago-Labs/biocontext7/issues"},"bin":{"biocontext7-mcp":"dist/index.js"},"dist":{"shasum":"ac8d88965564d2265e60355f88003fcbd851ebd8","tarball":"https://registry.npmjs.org/@biocontext7/mcp/-/mcp-0.1.0.tgz","fileCount":60,"integrity":"sha512-Qt1rPAScuPniQDYbTeDcOUN661CN02fpgZ1/HawFvfvfjvXrylLiphbNNEvTYLIx6c00k5nfTF4K3VfmO0pj1A==","signatures":[{"sig":"MEUCIQDTO4lEnFDqwmwBLjzPLpC32TgO7nlgDb446EjbBJIVewIgBkvyi07u7e0NX8eoZsAGgm33e41rKGqiwCbGZefDYmQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5293452},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./context":{"types":"./dist/context.d.ts","import":"./dist/context.js"},"./middleware":{"types":"./dist/middleware.d.ts","import":"./dist/middleware.js"}},"gitHead":"bc626221bae63c38dc82c83c13e6b790e03f824a","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","test":"vitest run","build":"python3 ../../scripts/build-skills-index.py && tsc","clean":"rm -rf dist","start":"node dist/index.js","start:sse":"node dist/index.js --transport sse","start:http":"node dist/index.js --transport http","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"jaureguy760","email":"jeffpjaureguy@gmail.com"},"repository":{"url":"git+https://github.com/Hordago-Labs/biocontext7.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.7.0","description":"TypeScript MCP server for biocontext7 — bioinformatics tool discovery and documentation","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","express":"^4.21.0","ioredis":"^5.4.1","zod-to-json-schema":"^3.24.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"bin":{"biocontext7-mcp":"dist/index.js","@biocontext7/mcp":"dist/index.js"},"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.0_1771814871729_0.14460579351694336","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@biocontext7/mcp","version":"0.1.1","keywords":["mcp","bioinformatics","biocontext7","context7","claude"],"author":{"name":"Hordago Labs"},"license":"MIT","_id":"@biocontext7/mcp@0.1.1","maintainers":[{"name":"jaureguy760","email":"jeffpjaureguy@gmail.com"}],"homepage":"https://github.com/Hordago-Labs/biocontext7/tree/main/packages/mcp#readme","bugs":{"url":"https://github.com/Hordago-Labs/biocontext7/issues"},"bin":{"mcp":"dist/index.js","biocontext7-mcp":"dist/index.js"},"dist":{"shasum":"d8614a31122fb82664e107e6cb90728775a8cb44","tarball":"https://registry.npmjs.org/@biocontext7/mcp/-/mcp-0.1.1.tgz","fileCount":60,"integrity":"sha512-WVexWQkX8YxjmjUSKSxCmAy3aa2TJ2KU0dRDfY7TUhSIHUiQ+9wdOfJKFiDVefyIYCPxg7pXZp/pD7HBSjkUeg==","signatures":[{"sig":"MEUCIBL2vqlhfCqX+ANwaW50K+ajG1GUaKdwF9/+gmv4xqSrAiEA94G9eJq9AWyT2RDNYxmVLVRwigEH7jwQjhLXUxuZiDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5293480},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./context":{"types":"./dist/context.d.ts","import":"./dist/context.js"},"./middleware":{"types":"./dist/middleware.d.ts","import":"./dist/middleware.js"}},"gitHead":"bc626221bae63c38dc82c83c13e6b790e03f824a","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","test":"vitest run","build":"python3 ../../scripts/build-skills-index.py && tsc","clean":"rm -rf dist","start":"node dist/index.js","start:sse":"node dist/index.js --transport sse","start:http":"node dist/index.js --transport http","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"jaureguy760","email":"jeffpjaureguy@gmail.com"},"repository":{"url":"git+https://github.com/Hordago-Labs/biocontext7.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.7.0","description":"TypeScript MCP server for biocontext7 — bioinformatics tool discovery and documentation","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","express":"^4.21.0","ioredis":"^5.4.1","zod-to-json-schema":"^3.24.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"bin":{"biocontext7-mcp":"dist/index.js","@biocontext7/mcp":"dist/index.js"},"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.1_1771814937200_0.16534243483877153","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@biocontext7/mcp","version":"0.1.2","keywords":["mcp","bioinformatics","biocontext7","context7","claude"],"author":{"name":"Hordago Labs"},"license":"MIT","_id":"@biocontext7/mcp@0.1.2","maintainers":[{"name":"jaureguy760","email":"jeffpjaureguy@gmail.com"}],"homepage":"https://github.com/Hordago-Labs/biocontext7/tree/main/packages/mcp#readme","bugs":{"url":"https://github.com/Hordago-Labs/biocontext7/issues"},"bin":{"mcp":"dist/index.js","biocontext7-mcp":"dist/index.js"},"dist":{"shasum":"5d2c23adbcd8b34e14791daff2e6925735b8f48c","tarball":"https://registry.npmjs.org/@biocontext7/mcp/-/mcp-0.1.2.tgz","fileCount":60,"integrity":"sha512-wDWkuqleE0Fo3CKjv6JeGr5DFQZOWwMOg+C2YwdzqzhCLgmzuGp6uX4in4Mk/5PvMI2eI7MyCGK4XHEcG5p1ZQ==","signatures":[{"sig":"MEUCIQCn4vanxwzlvbLTPe12unDciY5+QcHyp/1Mo2gtbt8XqQIgTrDh/c4XWGZ6zac/rsgqBZ3Et2R6HFrwYQ8YHkR4cac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5641792},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./context":{"types":"./dist/context.d.ts","import":"./dist/context.js"},"./middleware":{"types":"./dist/middleware.d.ts","import":"./dist/middleware.js"}},"gitHead":"91a8bd6b7c58aa2e06ec55be88ae45d282eb0d4b","scripts":{"dev":"tsc --watch","lint":"tsc --noEmit","test":"vitest run","build":"python3 ../../scripts/build-skills-index.py && tsc","clean":"rm -rf dist","start":"node dist/index.js","start:sse":"node dist/index.js --transport sse","start:http":"node dist/index.js --transport http","test:watch":"vitest","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"jaureguy760","email":"jeffpjaureguy@gmail.com"},"repository":{"url":"git+https://github.com/Hordago-Labs/biocontext7.git","type":"git","directory":"packages/mcp"},"_npmVersion":"11.7.0","description":"TypeScript MCP server for biocontext7 — bioinformatics tool discovery and documentation","directories":{},"_nodeVersion":"22.15.0","dependencies":{"zod":"^3.24.0","jose":"^6.0.0","express":"^4.21.0","ioredis":"^5.4.1","zod-to-json-schema":"^3.24.0","@modelcontextprotocol/sdk":"^1.12.0"},"publishConfig":{"bin":{"biocontext7-mcp":"dist/index.js","@biocontext7/mcp":"dist/index.js"},"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.0.0","typescript":"^5.7.0","@types/node":"^22.0.0","@types/express":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp_0.1.2_1771816566653_0.3556814466313001","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@biocontext7/mcp","version":"1.0.0","description":"TypeScript MCP server for biocontext7 — bioinformatics tool discovery and documentation","type":"module","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./client":{"types":"./dist/client.d.ts","import":"./dist/client.js"},"./types":{"types":"./dist/types.d.ts","import":"./dist/types.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"},"./auth":{"types":"./dist/auth.d.ts","import":"./dist/auth.js"},"./context":{"types":"./dist/context.d.ts","import":"./dist/context.js"},"./middleware":{"types":"./dist/middleware.d.ts","import":"./dist/middleware.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"},"./token-bucket":{"types":"./dist/token-bucket.d.ts","import":"./dist/token-bucket.js"}},"bin":{"biocontext7":"dist/index.js","biocontext7-mcp":"dist/index.js","mcp":"dist/index.js"},"repository":{"type":"git","url":"git+https://github.com/Hordago-Labs/biocontext7.git","directory":"packages/mcp"},"scripts":{"build":"python3 ../../scripts/build-skills-index.py && tsc","start":"node dist/index.js","start:sse":"node dist/index.js --transport sse","start:http":"node dist/index.js --transport http","dev":"tsc --watch","fixtures:regression":"node tests/fixtures/generate-regression-fixtures.mjs","test":"sh -c 'test -f dist/index.js || tsc; vitest run \"$@\"' --","test:regression":"vitest run tests/regression-suite.test.ts","test:watch":"vitest","lint":"tsc --noEmit","clean":"rm -rf dist","prepublishOnly":"npm run clean && npm run build"},"keywords":["mcp","bioinformatics","biocontext7","context7","claude"],"author":{"name":"Hordago Labs"},"license":"MIT","homepage":"https://github.com/Hordago-Labs/biocontext7/tree/main/packages/mcp#readme","bugs":{"url":"https://github.com/Hordago-Labs/biocontext7/issues"},"publishConfig":{"access":"public","bin":{"@biocontext7/mcp":"dist/index.js","biocontext7":"dist/index.js","biocontext7-mcp":"dist/index.js"}},"engines":{"node":">=18.0.0"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.0","express":"^4.21.0","ioredis":"^5.4.1","jose":"^6.0.0","sql.js":"^1.14.1","zod":"^3.24.0","zod-to-json-schema":"^3.24.0"},"devDependencies":{"@types/express":"^5.0.0","@types/node":"^22.0.0","@types/sql.js":"^1.4.9","typescript":"^5.7.0","vitest":"^3.0.0"},"gitHead":"806073379eed85140da248a4e7c4386b07ef49f4","_id":"@biocontext7/mcp@1.0.0","_nodeVersion":"22.15.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-Ev16uVSqETsL5PRFa0q7zbEdKhQ7ah7DObVzn5hxDyEQ59nkp4g1UCHWMY4vSbOAekkhqR6mvdha6i2hBjyZMA==","shasum":"9f1eb6172ad60072bb4c83f51b6c5ec86b669c20","tarball":"https://registry.npmjs.org/@biocontext7/mcp/-/mcp-1.0.0.tgz","fileCount":84,"unpackedSize":25972589,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCP0xtyGBx3NlHzhhQbr4DmfK8xi86QWFOv/YwMInkY5AIhAN7AjedWVCHzHviKqA+gfW5gfb4EovhljXtB6sW9hJ60"}]},"_npmUser":{"name":"jaureguy760","email":"jeffpjaureguy@gmail.com"},"directories":{},"maintainers":[{"name":"jaureguy760","email":"jeffpjaureguy@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp_1.0.0_1776059480348_0.9661759777673111"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-23T02:47:51.634Z","modified":"2026-04-13T05:51:20.829Z","0.1.0":"2026-02-23T02:47:52.002Z","0.1.1":"2026-02-23T02:48:57.423Z","0.1.2":"2026-02-23T03:16:06.878Z","1.0.0":"2026-04-13T05:51:20.711Z"},"bugs":{"url":"https://github.com/Hordago-Labs/biocontext7/issues"},"author":{"name":"Hordago Labs"},"license":"MIT","homepage":"https://github.com/Hordago-Labs/biocontext7/tree/main/packages/mcp#readme","keywords":["mcp","bioinformatics","biocontext7","context7","claude"],"repository":{"type":"git","url":"git+https://github.com/Hordago-Labs/biocontext7.git","directory":"packages/mcp"},"description":"TypeScript MCP server for biocontext7 — bioinformatics tool discovery and documentation","maintainers":[{"name":"jaureguy760","email":"jeffpjaureguy@gmail.com"}],"readme":"# @biocontext7/mcp\n\nTypeScript MCP server for biocontext7 — bioinformatics tool discovery and documentation.\n\nWorks like [Context7](https://github.com/upstash/context7) but for bioinformatics: search 2,000+ deep skill bundles and pull their docs straight into your Claude context.\n\n## Quick Start\n\n### Claude Code (one-liner)\n\n```bash\nclaude mcp add biocontext7 -- npx -y @biocontext7/mcp@latest\n```\n\n### Run directly\n\n```bash\nnpx @biocontext7/mcp\n```\n\n## Tools\n\nThe server exposes five MCP tools:\n\n| Tool | Description |\n|------|-------------|\n| `resolve-library-id` | Search for bioinformatics tools by name or keyword |\n| `get-library-docs` | Fetch documentation for a specific tool by ID |\n| `find-skills` | Semantic skill search over 2,000+ deep skill bundles with quality scoring |\n| `recommend-tools` | Get ranked tool recommendations for analysis tasks |\n| `report-snippet-quality` | Report snippet helpfulness for relevance feedback |\n\n### resolve-library-id\n\nSearch for bioinformatics tools by name or keyword. Returns matched tool IDs with metadata.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `query` | `string` | Yes | Search query (e.g. `\"STAR\"`, `\"alignment\"`, `\"RNA-seq\"`) |\n\n**Example request:**\n\n```json\n{\n  \"query\": \"sequence alignment\"\n}\n```\n\n**Example response:**\n\n```\nFound 5 tool(s) matching \"sequence alignment\":\n\n- **STAR** (ID: `star`, v2.7.11b): Spliced Transcripts Alignment to a Reference [42 doc snippets, 8 examples]\n- **BWA** (ID: `bwa`, v0.7.18): Burrows-Wheeler Aligner [31 doc snippets, 5 examples]\n- **Bowtie2** (ID: `bowtie2`, v2.5.3): Fast short read aligner [28 doc snippets, 6 examples]\n```\n\n### get-library-docs\n\nFetch documentation for a specific bioinformatics tool by ID. Supports topic filtering, version selection, and token budget control.\n\n**Parameters:**\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `id` | `string` | Yes | — | Tool ID from `resolve-library-id` (e.g. `\"star\"`, `\"bwa\"`) |\n| `topic` | `string` | No | — | Topic filter to narrow documentation (e.g. `\"2-pass alignment\"`) |\n| `mode` | `\"chunks\" \\| \"document\"` | No | `\"chunks\"` | `\"chunks\"` returns ranked snippets via BM25/semantic search; `\"document\"` returns full source documents in original order |\n| `maxTokens` | `integer` | No | `5000` | Maximum tokens to return (min: 1000). Highest-relevance snippets first. |\n| `token_budget` | `integer` | No | — | Deprecated alias for `maxTokens`. Use `maxTokens` instead; when both are provided, `token_budget` takes precedence. |\n| `version` | `string` | No | latest | Version to fetch docs for (e.g. `\"3.20\"` for Bioconductor) |\n| `chunk_size` | `integer` | No | `2000` | Max characters per snippet (min: 500, max: 4000) |\n\n**Example request:**\n\n```json\n{\n  \"id\": \"star\",\n  \"topic\": \"2-pass alignment\",\n  \"maxTokens\": 3000\n}\n```\n\n**Example response:**\n\n```markdown\n# STAR (v2.7.11b)\n\nSpliced Transcripts Alignment to a Reference\n\n## Documentation\n\nSTAR's 2-pass alignment mode improves sensitivity for novel splice junction detection...\n\n---\n\nFor 2-pass alignment, use --twopassMode Basic which performs a first pass to discover junctions...\n\n## Code Examples\n\n\\```\nSTAR --runThreadN 8 --genomeDir /path/to/index --readFilesIn sample_R1.fq.gz sample_R2.fq.gz \\\n     --twopassMode Basic --outSAMtype BAM SortedByCoordinate\n\\```\n```\n\n### find-skills\n\nSemantic skill search over 2,000+ deep skill bundles with quality scoring (bc7score). Returns ranked results with install commands, health signals, and EDAM annotations. This is the most powerful single-call search tool — it combines discovery, scoring, and actionable install info.\n\nSkills returned by this tool are **auto-compiled** from live documentation via the [skill compiler pipeline](../../docs/internal/archive/SKILL_COMPILER.md) — not hand-crafted prompts. The pipeline crawls upstream sources (ReadTheDocs, Bioconductor vignettes, GitHub READMEs), segments tutorials into workflow-specific references, and compiles them into structured SKILL.md files with content-hash versioning for incremental updates.\n\n**Parameters:**\n\n| Parameter | Type | Required | Default | Description |\n|-----------|------|----------|---------|-------------|\n| `task_description` | `string` | Yes | — | The bioinformatics task you need tools for |\n| `top_k` | `integer` | No | `5` | Number of results (max: 20) |\n| `include_docs` | `boolean` | No | `false` | Include documentation snippets |\n| `include_install` | `boolean` | No | `true` | Include install commands |\n| `compact` | `boolean` | No | `true` | Compact results optimized for LLM context |\n| `platform` | `string` | No | — | Target platform (e.g. `\"darwin-arm64\"`, `\"linux-x86_64\"`) |\n| `token_budget` | `integer` | No | `3000` | Maximum tokens for the response (min: 500, max: 10000) |\n\n**Example request:**\n\n```json\n{\n  \"task_description\": \"single-cell RNA-seq clustering and visualization\",\n  \"top_k\": 3,\n  \"compact\": true,\n  \"platform\": \"linux-x86_64\"\n}\n```\n\n**Example response:**\n\n```\nFound 127 matching tools (showing top 3):\n\n### Scanpy (Gold)\nID: `scanpy` | bc7score: 92 | relevance: 0.95\nSingle-cell analysis in Python — clustering, visualization, differential expression\n**EDAM:** Single-cell analysis, Clustering, Dimensionality reduction\n**Install** (recommended: pip):\n  pip: `pip install scanpy`\n  conda: `conda install -c bioconda scanpy`\n**Health:** active | 2100 stars | last commit: 2025-12-15\n\n---\n\n### Seurat (Gold)\nID: `seurat` | bc7score: 89 | relevance: 0.91\nR toolkit for single-cell genomics...\n```\n\n### recommend-tools\n\nGet opinionated, ranked tool recommendations for a bioinformatics analysis task. Returns top 3 tools with justification, benchmark references, installation difficulty, compute requirements, and community adoption signals.\n\nCovers 10 analysis patterns: bulk RNA-seq DE, scRNA-seq clustering, variant calling, spatial deconvolution, ChIP/ATAC-seq peaks, genome assembly, metagenomics, protein structure, variant annotation, long-read analysis.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `query` | `string` | Yes | Analysis task description (e.g. `\"bulk RNA-seq differential expression\"`) |\n| `pattern` | `string` | No | Explicit analysis pattern ID to skip query matching (e.g. `\"spatial_deconvolution\"`) |\n\n**Example request:**\n\n```json\n{\n  \"query\": \"For 10x Visium spatial data, what tool for deconvolution?\"\n}\n```\n\n### report-snippet-quality\n\nReport whether a documentation snippet was helpful or unhelpful. Unhelpful snippets are penalized in subsequent retrievals within the session, improving relevance over time.\n\n**Parameters:**\n\n| Parameter | Type | Required | Description |\n|-----------|------|----------|-------------|\n| `chunk_id` | `integer` | Yes | The `chunk_id` from a `get-library-docs` response |\n| `helpful` | `boolean` | Yes | Whether the snippet was helpful |\n| `session_id` | `string` | No | Session identifier for scoped feedback |\n| `query` | `string` | No | Original query that returned this snippet |\n\n## Typical Workflow\n\n### Two-step: search then docs\n\n```\n1. resolve-library-id(\"RNA-seq alignment\")\n   → Returns: star, hisat2, bwa, ...\n\n2. get-library-docs(id=\"star\", topic=\"2-pass\", maxTokens=3000)\n   → Returns: documentation snippets + code examples\n```\n\n### Single-call: find-skills\n\n```\n1. find-skills(task_description=\"single-cell RNA-seq clustering\", compact=true)\n   → Returns: ranked tools with install commands, scores, and health signals\n```\n\n`find-skills` is the recommended entry point for most use cases — it returns everything needed to evaluate and install tools in a single call, optimized for LLM context windows.\n\n## Token Usage\n\nThe server is designed to minimize token consumption in LLM contexts:\n\n| Feature | Description |\n|---------|-------------|\n| **Compact mode** | `find-skills` defaults to `compact: true`, returning concise results optimized for LLM context |\n| **Token budgets** | `get-library-docs` and `find-skills` accept `maxTokens` / `token_budget` to control response size |\n| **Structured JSON** | `get-library-docs` returns `structuredContent` metadata (snippet count, total tokens, truncation status) alongside text |\n| **Chunk size control** | `get-library-docs` accepts `chunk_size` (500–4000 chars) to tune snippet granularity |\n| **Call limits** | Max 3 calls per tool per question to prevent runaway usage |\n\n### Comparison with Context7\n\n| | biocontext7 | Context7 |\n|---|-------------|----------|\n| **Domain** | Bioinformatics (2,000+ deep skill bundles) | General-purpose (all libraries) |\n| **Tools** | 5 (search, docs, skills, recommend, feedback) | 2 (resolve, get-docs) |\n| **Skill search** | `find-skills` — single-call with install + scoring | N/A |\n| **Recommendations** | `recommend-tools` — benchmark-backed | N/A |\n| **Platform filtering** | `platform` parameter on `find-skills` | N/A |\n| **Compact mode** | Default on `find-skills` | N/A |\n| **Relevance feedback** | `report-snippet-quality` loop | N/A |\n| **EDAM ontology** | Semantic operation/topic annotations | N/A |\n| **Version selection** | `version` parameter on `get-library-docs` | N/A |\n\n## Configuration\n\n### Claude Desktop\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"biocontext7\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@biocontext7/mcp@latest\"]\n    }\n  }\n}\n```\n\n### Claude Code\n\nOne-liner install:\n\n```bash\nclaude mcp add biocontext7 -- npx -y @biocontext7/mcp@latest\n```\n\nOr add manually to your `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"biocontext7\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@biocontext7/mcp@latest\"]\n    }\n  }\n}\n```\n\n### Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `BIOCONTEXT7_API_URL` | Backend API base URL | `https://api.biocontext7.com` |\n| `BIOCONTEXT7_API_KEY` | API key for authentication | — |\n| `PORT` | Port for SSE/HTTP transports | `3100` |\n| `MCP_RATE_LIMIT_STORE` | Rate-limit backend (`memory` or `redis`) | `memory` |\n| `MCP_RATE_LIMIT_REDIS_URL` | Redis URL when `MCP_RATE_LIMIT_STORE=redis` | — |\n| `MCP_RATE_LIMIT_KEY_PREFIX` | Optional counter key prefix | `biocontext7:mcp:ratelimit` |\n\n## Transport Modes\n\n```bash\n# stdio (default) — for local Claude usage\nnpx @biocontext7/mcp\n\n# SSE transport — for streaming clients\nnpx @biocontext7/mcp --transport sse\n\n# HTTP transport — for remote deployment\nnpx @biocontext7/mcp --transport http\n```\n\n## HTTP Endpoints\n\nWhen running in HTTP or SSE transport mode, the following endpoints are available:\n\n| Endpoint | Auth | Description |\n|----------|------|-------------|\n| `/mcp` | Anonymous / API key / OAuth | Main MCP endpoint for tool calls |\n| `/mcp/oauth` | OAuth JWT only | OAuth-protected MCP endpoint |\n| `/health` | None | Health check |\n| `/.well-known/oauth-protected-resource` | None | RFC 9728 resource metadata (requires OAuth config) |\n| `/.well-known/oauth-authorization-server` | None | RFC 8414 authorization server metadata proxy (requires OAuth config) |\n\n## Rate Limiting\n\nRate limiting is enforced on MCP tool endpoints (`/mcp`, `/mcp/oauth`, `/messages`) with health checks excluded.\n\n### Default Limits\n\n| Tier | Requests/minute | Requests/hour | Scope |\n|------|-----------------|---------------|-------|\n| `anonymous` | 100 | 1,000 | Per IP |\n| `free` (API key) | 300 | 3,000 | Per IP + per API key |\n| `pro` | 1,000 | 10,000 | Per IP + per API key |\n| `enterprise` | 5,000 | 50,000 | Per IP + per API key |\n\nAll MCP responses include:\n\n- `X-RateLimit-Limit`\n- `X-RateLimit-Remaining`\n- `X-RateLimit-Reset`\n- `X-RateLimit-Tier`\n\nWhen a limit is exceeded, the server returns `429` with:\n\n- `Retry-After` header\n- JSON body with `error`, `retry_after`, `window`, and identifier metadata\n\n### OAuth Discovery Flow\n\nWhen OAuth is enabled, the MCP server supports standards-compliant client discovery:\n\n1. A client sends a request to `/mcp/oauth` without credentials\n2. The server returns `401` with a `WWW-Authenticate: Bearer resource_metadata=\"<url>\"` header (RFC 9728)\n3. The client fetches `/.well-known/oauth-protected-resource` to discover the authorization server\n4. The client fetches `/.well-known/oauth-authorization-server` to discover authorization and token endpoints\n5. The client completes the OAuth flow and retries with a valid JWT\n\n### OAuth Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `OAUTH_JWKS_URI` | JWKS endpoint for JWT validation |\n| `OAUTH_ISSUER` | Expected JWT issuer |\n| `OAUTH_AUDIENCE` | Expected JWT audience (optional) |\n| `OAUTH_AUTH_SERVER` | Authorization server URL |\n| `MCP_AUTH_REQUIRED` | Require auth on `/mcp` (default: `false`) |\n\n## Programmatic Usage\n\n```typescript\nimport { createServer } from \"@biocontext7/mcp/server\";\nimport type { ClientConfig } from \"@biocontext7/mcp/types\";\n\nconst server = createServer({ baseUrl: \"https://api.example.com\" });\n```\n\n## Exports\n\n| Path | Exports |\n|------|---------|\n| `@biocontext7/mcp` | Default entry point |\n| `@biocontext7/mcp/client` | `Biocontext7Client` HTTP client |\n| `@biocontext7/mcp/server` | `createServer` factory |\n| `@biocontext7/mcp/types` | Shared TypeScript types |\n\n## Local Development\n\n```bash\ncd packages/mcp\npnpm install\npnpm build\npnpm test        # vitest run\npnpm dev         # tsc --watch\npnpm lint        # tsc --noEmit\n```\n\n## Publishing\n\n```bash\ncd packages/mcp\nnpm publish\n```\n\nThe `prepublishOnly` script runs `clean && build` automatically before publish. The package is configured with `publishConfig.access: \"public\"` for the `@biocontext7` scope.\n","readmeFilename":"README.md"}