xyz.crossgrain/epitaxy
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@xyz.crossgrain/epitaxyshow drug shortage exposure for Pfizer and matching federal contracts"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
epitaxy
mcp-name: xyz.crossgrain/epitaxy
Federal drug shortages and recalls, joined to the federal contracts that buy those drugs. One call, no signup.
What it claims: this government supplier has an active FDA shortage or recall. What it does not claim: that a specific contract supplies a specific drug. Federal contract descriptions average 47 characters and almost never name the drug, so we say so instead of pretending otherwise.
Try it now, no key
curl https://drugs.crossgrain.xyz/v1/exposure?limit=5Related MCP server: OpenFDA FastMCP Server
MCP
Remote, nothing to install:
{ "mcpServers": { "epitaxy": { "url": "https://drugs.crossgrain.xyz/v1/mcp" } } }Local, stdio:
{ "mcpServers": { "epitaxy": { "command": "uvx", "args": ["epitaxy-mcp"] } } }Tools: get_data_freshness, list_drug_shortages, list_drug_recalls,
list_federal_drug_contracts, get_supplier_exposure.
Read the confidence field, always
value | meaning |
| match on a shared identifier, here an NDC inside FDA data |
| normalized company name, or a drug name token in the contract text |
| anything softer, an indication only |
Matching on both company and drug at once is not promoted to
exact. Cross source joins are never exact, because FDA and
USAspending share no identifier. Anyone claiming otherwise has a
different source or is guessing.
Free tier
Works forever, no key, no signup. Returns at most 20 rows, without the
evidence field, without weak matches, and with data delayed by 24
hours. Nothing is stored: no counters, no IP addresses.
Paid
plan | price | contents |
Starter | 29 USD/mo | 10 000 calls |
Pro | 99 USD/mo | 100 000 calls plus daily delta feed |
x402 | 0.004 USD/call | USDC on Base, no signup |
Bulk dump | 199 USD | one off, Stripe only |
Sources and licence
openFDA, public domain, CC0 1.0 Universal
USAspending, public domain, code under CC0
Data is unvalidated and must not be used for medical decisions. This project is MIT licensed. Docs: https://drugs.crossgrain.xyz/docs
Available Tools
5 toolsget_data_freshnessAInspect
Vrati cas poslednej aktivacie dat, pocet zivych segmentov a stav posledneho behu. Volaj to prve, ked chces vediet, ci su data cerstve.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It transparently discloses the three key outputs: last data activation time, number of live segments, and status of the last run. The wording implies a read-only query, which is reasonable for a zero-parameter freshness check.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the return values first and the usage guidance second. Every word contributes meaning, and no redundant or filler content is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description fully covers what the agent needs to know to call and interpret the result. No missing preconditions, side effects, or return-value details are likely to block correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema coverage, so the description does not need to explain parameter meanings. Per the baseline for zero-parameter tools, a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Vrati' (returns) and clearly identifies the resource: data freshness information including last activation time, live segment count, and last run status. It is immediately distinguishable from the drug-list sibling tools because it addresses freshness rather than content lists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: call this tool first when wanting to know whether the data is fresh. It does not name exclusions or alternatives, but no sibling tool appears to serve the same freshness-check purpose, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supplier_exposureAInspect
Spojenie kontraktu s vypadkom alebo stiahnutim. KAZDY riadok nesie confidence exact, probable alebo weak a match_method. Cross source spojenie NIKDY nie je exact, lebo medzi FDA a USAspending neexistuje spolocny identifikator. Tvrdenie znie: tento dodavatel vlady ma u FDA aktivny vypadok alebo stiahnutie. NETVRDI, ze konkretny kontrakt dodava konkretny liek. Bez kluca sa vracaju len exact a probable zhody, najviac 20 riadkov, bez evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| award_id | No | ||
| company_id | No | ||
| min_confidence | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does so thoroughly: it discloses confidence values, match_method, the never-exact cross-source rule, default output scope (exact/probable, max 20 rows, no evidence), and the inference boundary (supplier-level, not contract-level). This is strong behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loaded with the core purpose; every sentence covers a distinct semantic point such as claim, confidence, cross-source limitation, and default behavior. It is slightly rambling and uses capitalization for emphasis, but it earns its length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 optional parameters, no output schema, and no annotations, the description provides strong domain semantics but still lacks explicit parameter-to-field mapping and a clear statement of the output row format or how a key changes evidence. An agent could call it but might guess wrong about award_id/company_id and min_confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the text must explain the parameters. It hints at 'bez kluca' (without a key) and mentions confidence levels and the 20-row limit, but never maps award_id/company_id to 'key', never defines limit, and leaves min_confidence's 'probable'/'weak' enum unexplained relative to output confidence exact/probable/weak. Most parameter semantics are still guesswork.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: it links contracts (kontraktu) to FDA shortages/recalls (vypadkom alebo stiahnutim). It also states the exact claim and non-claim, which distinguishes this from sibling list tools such as list_drug_shortages and list_federal_drug_contracts. This goes well beyond a tautology and gives an agent a precise mental model.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this is appropriate: cross-referencing government contracts with FDA shortage/recall data. It also includes an explicit 'NETVRDI' caveat warning against over-interpreting results as drug-level attribution. It does not name alternatives or provide when-not scenarios beyond that caveat, so it does not reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_drug_recallsCInspect
Stiahnutia liekov podla FDA. Filtre: classification, company_id, limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| company_id | No | ||
| classification | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden of behavioral disclosure, but it only states the subject matter and filter names. It does not say the operation is read-only, what output is returned, whether filtering is exact/partial, or how limits apply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short and puts the topic first, with the filter list following after. It uses no filler, though the filter section could have been more informative without losing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and 0% parameter documentation, this is under-specified: the action must be inferred from the tool name, return values are absent, and parameter meanings are unclear. It is enough to know the topic but not enough to invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description needed to explain classification, company_id, and limit. It merely repeats their names under 'Filtre' and adds no formats, allowed values, defaults, or semantics beyond the schema itself.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the domain (drug recalls) and the data source (FDA), and the mention of filters indicates a queryable listing operation. It can be told apart from sibling tools like list_drug_shortages by the recall focus, but it never uses an explicit action verb like 'list' or 'return' and is written in Slovak.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The filter list provides only an implicit hint of how to call the tool; it does not state when to prefer this tool over alternatives such as list_drug_shortages or get_supplier_exposure. There are no usage exclusions, prerequisites, or scenarios provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_drug_shortagesCInspect
Vypadky liekov podla FDA. Filtre: status, generic_name, company_id, limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | ||
| company_id | No | ||
| generic_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden, but it only states that the tool returns FDA drug shortages and supports filters. It does not disclose return format, ordering, pagination, data freshness, or any read-only guarantees.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short, front-loaded sentence with no filler words. It is easy to scan, though the brevity sacrifices explanatory depth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and no parameter descriptions, the description is too thin. An agent would not know valid status values, limit constraints, company ID semantics, or what the response looks like, making reliable autonomous invocation uncertain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only repeats the parameter names under 'Filtre' without explaining allowed values, formats, or limits. The parameter names are somewhat self-explanatory, but the description does not meaningfully compensate for the missing schema details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource as 'drug shortages' and the authoritative source as 'FDA', which distinguishes it from sibling tools like list_drug_recalls and list_federal_drug_contracts. It lacks an explicit verb, but the tool name and filter list clearly imply a listing operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description lists filters but provides no guidance on when to use this tool versus the sibling tools, nor any exclusions or alternative conditions. An agent gets no help deciding between drug shortages, drug recalls, or federal contracts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_federal_drug_contractsCInspect
Federalne kontrakty na lieky, PSC 6505. Filtre: agency, company_id, limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| agency | No | ||
| company_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It states the subject matter and available filters but does not mention that the operation is read-only, what the response looks like, or any limitations or side effects. This is a minimal disclosure for a tool with no annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short, front-loading the core subject and then listing filters. However, the filter clause essentially restates schema property names, so the wording is concise but not as information-dense as its length could allow. It is structured acceptably but under-delivers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description leaves an agent under-informed. It does not describe the shape of returned contracts, how filters interact, default limits, or data freshness. For a list tool with three optional filters, this is missing key context needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain the parameters. It names all three (agency, company_id, limit) and labels them as 'Filtre', which adds the role of filters, but it provides no meaning, format, or examples for any of them. This adds little beyond the schema property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource: 'Federalne kontrakty na lieky' (federal drug contracts) and pins it to PSC 6505, which clearly distinguishes it from sibling tools focused on shortages and recalls. It lacks an explicit verb like 'list' in the description itself, though the tool name provides it, so it falls just short of the 5-bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus list_drug_shortages, list_drug_recalls, or other siblings. It only lists filters and offers no exclusions, alternatives, or contextual triggers, so the agent must infer applicability from the resource name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
5 tool updates
v0.1.3- First observed
get_data_freshness - First observed
get_supplier_exposure - First observed
list_drug_recalls - First observed
list_drug_shortages - First observed
list_federal_drug_contracts
TDQS
Each tool targets a clear, distinct concern: shortages, recalls, federal contracts, cross-source supplier exposure, and data freshness. There is no meaningful overlap in purpose, and get_supplier_exposure is explicitly a join/view rather than another list endpoint.
Tool names follow a consistent list_/get_ + noun pattern in snake_case. Collections use list_, single objects and metadata use get_, making the API predictable and easy to navigate.
With 5 tools, the server is tightly scoped to pharmaceutical supply chain risk. Each tool supports a distinct part of the workflow, and none feel redundant or missing enough to make the set feel thin.
The core workflow of finding shortages, recalls, contracts, and supplier exposure is covered well. A minor gap is the lack of a company/detail lookup to discover valid company_id values, and no individual record retrieval, but these are workarounds via filters rather than dead ends.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Scrape openFDA drug recalls, enforcement reports, labels and adverse events. Pay per row.
OFAC, FDA, federal award and Federal Register lookups with signed machine evidence.
Federal contracts, FDA recalls, business registrations, Amazon products — B2B intel.
US federal contracting data: open solicitations, buying agencies, contractors, price history.
Related MCP Servers
- AlicenseBqualityCmaintenanceQuery 20 structured datasets from AI agents — healthcare providers (9M NPI records), SEC EDGAR filings, PACER federal courts, USPTO patents and trademarks, OFAC sanctions screening, crypto whale wallets, DeFi liquidation signals, Polymarket smart money, economic indicators (FRED/BLS), federal contracts, NOAA weather, and OTC shell risk scoring. Pay per query, no subscriptions751MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to query and analyze FDA adverse events, drug labels, medical device clearances, and other public health datasets through natural language commands.13-
- FlicenseNot gradedqualityDmaintenanceEnables querying FDA drug approvals, device clearances (510(k)), recalls, and adverse events via the openFDA API, providing tools for clinical and pharmaceutical research.1-
- AlicenseBqualityDmaintenanceEnables querying FDA drug label information including adverse reactions, warnings, and indications through natural language.519GPL 3.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vor-bot/epitaxy-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server