Developer API and MCP server
The same peptide reference the site shows, as JSON and as a tool your AI assistant can call. 134 peptides with dosing, mechanism, evidence and citations. Free for non-commercial use with attribution.
REST API v1
Base URL: https://api.peptidelabs.app. JSON responses. No key is needed for read access; the server rate-limits by IP.
- GET /api/v1/peptides
- Every peptide, sorted by name, 50 per page. Query: ?page=, ?per_page= (max 100), ?category=<slug>, ?fields=a,b.
- GET /api/v1/peptides/{slug}
- One peptide by its URL slug, for example bpc-157. Same fields as the web page. 404 JSON when the slug is unknown.
- GET /api/v1/categories
- The category list: name, slug and peptide count.
- GET /api/v1/search?q=
- Name, alias, description and benefits search. At least 2 characters, at most 25 results.
- GET /api/v1/openapi.json
- The OpenAPI 3.1 document for everything above.
Every response is an envelope: data plus meta with total, page, per_page (lists only), generated_at, source, attribution, license (CC BY-NC 4.0) and the research-use disclaimer. Responses are cacheable for five minutes and the limit is 60 requests a minute per IP, reported in the standard RateLimit headers.
Quick start
curl https://api.peptidelabs.app/api/v1/peptides/bpc-157
curl "https://api.peptidelabs.app/api/v1/peptides?category=healing-recovery&per_page=5&fields=name,dose_min_mcg,dose_max_mcg,dose_unit"
curl "https://api.peptidelabs.app/api/v1/search?q=tb-500"A record looks like this (trimmed):
{
"data": {
"id": 9,
"slug": "bpc-157",
"url": "https://peptidelabs.app/peptides/bpc-157/",
"name": "BPC-157",
"categories": ["healing & recovery"],
"dose_min_mcg": 250,
"dose_max_mcg": 500,
"dose_unit": "mcg",
"dose_frequency": "1-2x daily",
"evidence_level": "preclinical",
"references": [{ "title": "...", "doi": "10.xxxx/..." }]
},
"meta": {
"source": "https://peptidelabs.app",
"attribution": "Data from PeptideLab (https://peptidelabs.app). Link back required.",
"license": "CC BY-NC 4.0",
"disclaimer": "..."
}
}MCP server
Streamable HTTP endpoint: https://api.peptidelabs.app/mcp. Stateless, read-only, no login. Same 60 requests a minute per IP. Every result carries the source URL and the research-use disclaimer.
Tools
- search_peptides(query, category?, limit?)
- Find peptides by name, alias or keyword, optionally within one category. Up to 25 results.
- get_peptide(slug)
- The full record for one peptide: dosing, reconstitution, mechanism, evidence, side effects, storage, citations.
- list_categories()
- Every category with slug and count.
- compare_prices(slug)
- In-stock vendor prices for one peptide, cheapest per mg first, with product links.
- reconstitution_calc(vial_mg, water_ml, dose_mcg)
- Concentration in mg/mL, dose volume in mL and U-100 syringe units, with a plain-English line.
- search(query) and fetch(id)
- ChatGPT connector aliases. search returns {results: [{id, title, url}]}; fetch returns {id, title, text, url, metadata}. The id is the peptide slug.
Claude Code
claude mcp add --transport http peptidelab https://api.peptidelabs.app/mcpclaude.ai
Settings, then Connectors, then Add custom connector. Name it PeptideLab and paste https://api.peptidelabs.app/mcp. No OAuth step; leave the client fields blank.
ChatGPT
Settings, then Connectors, then Advanced, then turn on Developer mode. Create a connector with the URL https://api.peptidelabs.app/mcp and no authentication.
Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"peptidelab": { "url": "https://api.peptidelabs.app/mcp" }
}
}Attribution
The data is free for non-commercial use. Show a visible link to peptidelabs.app wherever you display it, and keep the research-use framing intact. Commercial use needs a written agreement: support@peptidelabs.app.
For language models
/llms.txt is the index for crawlers and assistants, and /llms-full.txt carries every peptide page as markdown in one file. Both follow the llmstxt.org layout.