Skip to main content
Glama

TruthStack MCP Server

The first supplement-drug interaction safety tool for AI agents.

TruthStack provides structured, evidence-based supplement safety intelligence via the Model Context Protocol. Instead of relying on LLM training data that hallucinates safety information, your agent calls TruthStack for deterministic, cited risk assessments.

Why This Exists

LLMs confidently say "ashwagandha is generally safe with sertraline." TruthStack's API returns MODERATE RISK with 25 FDA adverse event reports and CYP3A4 pathway conflict data. That gap kills people.

5 Tools

Tool

What It Does

When to Use

check_interactions

Supplements + medications → risk level, FAERS signals, CYP conflicts

User mentions supplements + meds together

search_compounds

Fuzzy name search (584 aliases, handles misspellings/brands)

Need to resolve messy input ("mag gly", "KSM-66")

get_compound_info

Full compound profile + all interactions

Deep dive on a specific supplement

explain_interaction

Human-readable WHY — mechanism, severity, evidence summary

Need to explain risk to a user

get_evidence

Raw evidence: FAERS counts, CYP data, research grades, label warnings

Need to cite sources or provide provenance

Data Sources

  • FDA FAERS — 805 adverse event signals from real-world pharmacovigilance

  • FDA Drug Labels — CYP450 pathways, contraindications, botanical warnings

  • PubMed/ClinicalTrials.gov — 220 research findings with evidence grading

  • 584 compound aliases — misspellings, brand names, abbreviations, product forms

Quick Start

1. Get API Key

Contact chris@truthstack.co or visit truthstack.co

2. Install

git clone https://github.com/truthstack/truthstack-mcp.git
cd truthstack-mcp
npm install

3. Configure Claude Desktop

Edit ~/.claude/claude_desktop_config.json:

{
  "mcpServers": {
    "truthstack": {
      "command": "node",
      "args": ["/path/to/truthstack-mcp/server.js"],
      "env": {
        "VAULT_API_URL": "https://api.truthstack.co",
        "VAULT_API_KEY": "your-api-key"
      }
    }
  }
}

Restart Claude Desktop. You'll see TruthStack tools available in the tool picker.

4. Test It

Ask Claude: "I take ashwagandha, fish oil, and magnesium with sertraline. Is this safe?"

Claude will call check_interactions and return a structured risk assessment with FDA adverse event data.

LangChain Integration

from langchain_community.tools import MCPTool

# If using MCP adapter
truthstack = MCPTool(server_path="./server.js", env={
    "VAULT_API_URL": "https://api.truthstack.co",
    "VAULT_API_KEY": "your-key"
})

# Or call the REST API directly
import requests

response = requests.post(
    "https://api.truthstack.co/api/interactions/check",
    headers={"X-API-Key": "your-key"},
    json={
        "supplements": ["ashwagandha", "fish oil", "magnesium"],
        "medications": ["sertraline"]
    }
)
print(response.json())

REST API Fallback

Every MCP tool maps to a REST endpoint:

MCP Tool

REST Endpoint

check_interactions

POST /api/interactions/check

search_compounds

GET /api/compounds/search?q={query}

get_compound_info

GET /api/compounds/{id} + GET /api/compounds/{id}/interactions

explain_interaction

Composite (search + interactions + drug profile)

get_evidence

Composite (search + interactions + drug profile)

Base URL: https://api.truthstack.co Auth: X-API-Key header

Example Response

User: "Is ashwagandha safe with sertraline?"

→ check_interactions({
    supplements: ["ashwagandha"],
    medications: ["sertraline"]
  })

→ {
    "risk_level": "MODERATE",
    "drug_interactions": [{
      "supplement": "ashwagandha",
      "drug": "sertraline",
      "severity": "MODERATE",
      "source": "FDA FAERS",
      "report_count": 25,
      "description": "Pharmacovigilance signal — 25 serious adverse events reported"
    }],
    "cyp_pathway_conflicts": [{
      "drug": "sertraline",
      "supplement": "ashwagandha",
      "shared_cyp_pathways": ["CYP3A4"]
    }]
  }

Compare to raw LLM: "Ashwagandha is generally considered safe and may complement sertraline for anxiety."

System Message Template

If you're building a health agent, add this to your system prompt:

You have access to TruthStack supplement safety tools. ALWAYS use check_interactions 
before confirming any supplement is safe with a medication. Never rely on your training 
data for drug-supplement interaction safety — use the structured API instead.

When reporting results:
- State the risk level clearly (CRITICAL/HIGH/MODERATE/LOW)
- Mention specific FAERS adverse event counts when available
- Note CYP pathway conflicts
- Always recommend consulting a healthcare provider for MODERATE+ risks
- Use explain_interaction when users ask "why is this risky?"
- Use get_evidence when users want to see the sources

Contributing

We're looking for:

  • Integration partners — building a health AI agent? Get free API access.

  • Compound contributions — know of missing supplement aliases or interactions? Open an issue.

  • Framework examples — help us add examples for CrewAI, AutoGen, LlamaIndex.

License

MIT

Contact

Available Tools

5 tools
check_interactionsA

Check if supplements are safe with medications. Returns risk level, FDA adverse event data, CYP450 conflicts. Use when user mentions supplements + meds.

ParametersJSON Schema
NameRequiredDescriptionDefault
supplementsYesSupplement names (handles brands, abbreviations, misspellings)
medicationsYesMedication names (generic or brand)

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. While it mentions what the tool returns (risk level, FDA adverse event data, CYP450 conflicts), it lacks critical behavioral details such as whether this is a read-only operation, potential side effects of incorrect use, data sources, or limitations in handling misspellings. For a safety-critical tool with zero annotation coverage, this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, followed by output details and usage guidelines in just two sentences. Every sentence earns its place by providing essential information without redundancy or unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of a safety-checking tool with no annotations and no output schema, the description is moderately complete. It covers purpose, outputs, and usage context but lacks details on behavioral traits, error handling, or response format. This is adequate for basic use but leaves gaps for reliable agent operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already fully documents both parameters (supplements and medications). The description does not add any additional meaning or context beyond what the schema provides (e.g., it doesn't clarify parameter interactions or usage examples). Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Check if supplements are safe with medications' with specific outputs (risk level, FDA adverse event data, CYP450 conflicts). It uses a precise verb ('Check') and identifies the resources involved (supplements and medications), making it distinct from sibling tools like 'explain_interaction' or 'get_compound_info'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'Use when user mentions supplements + meds.' This provides clear, actionable guidance for the AI agent on the appropriate context for invoking this tool versus alternatives, though it doesn't name specific sibling tools as alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_interactionA

Human-readable explanation of WHY an interaction is risky. Returns mechanism, severity, evidence summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
supplementYesSupplement name
drugYesDrug name

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: the tool returns a human-readable explanation (not raw data), includes mechanism, severity, and evidence summary in the output. However, it lacks details on error handling, rate limits, authentication needs, or response format specifics, leaving gaps for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise and front-loaded: one sentence directly states the purpose and output components. Every word earns its place with zero waste, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is moderately complete. It covers the purpose and output structure (mechanism, severity, evidence summary), but lacks details on error cases, response format, or integration with sibling tools. For a tool with 2 parameters and no structured output documentation, this leaves some operational gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear parameter descriptions in the schema. The description does not add any meaning beyond the schema—it does not explain parameter relationships, formatting, or examples. Since the schema fully documents the parameters, the baseline score of 3 is appropriate, as the description provides no extra value here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs and resources: 'Human-readable explanation of WHY an interaction is risky' specifies the action (explain), target (interaction), and outcome (risk explanation). It distinguishes from sibling tools like 'check_interactions' (likely checks for interactions) and 'get_evidence' (likely retrieves raw evidence) by focusing on explanatory output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention sibling tools like 'check_interactions' or 'get_evidence', nor does it specify prerequisites, exclusions, or contextual triggers for usage. The agent must infer usage from the purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_compound_infoB

Get detailed compound profile with interactions, research findings, and aliases.

ParametersJSON Schema
NameRequiredDescriptionDefault
compound_idYesCompound ID from search_compounds

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions what data is returned (interactions, research findings, aliases) but doesn't disclose behavioral traits like whether this is a read-only operation, potential rate limits, authentication needs, error handling, or response format. For a tool with no annotations, this leaves significant gaps in understanding how it behaves beyond basic output content.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('Get detailed compound profile') and lists key content areas without unnecessary words. Every part earns its place by specifying what the tool does, making it appropriately sized and well-structured for quick understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (1 parameter, no output schema, no annotations), the description is minimally adequate. It states the purpose and output content but lacks details on behavioral aspects, error cases, or how it integrates with siblings. Without annotations or output schema, more context on return values or operational constraints would improve completeness, but it meets basic requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the parameter 'compound_id' fully documented in the schema as 'Compound ID from search_compounds'. The description adds no additional parameter semantics beyond what the schema provides. According to rules, with high schema coverage (>80%), the baseline is 3 even with no param info in the description, which applies here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and resource ('detailed compound profile') with specific content areas (interactions, research findings, aliases). It distinguishes from siblings like 'search_compounds' (search vs. get detailed profile) and 'check_interactions' (check vs. get full profile), though not explicitly named. The purpose is specific but could more directly contrast with alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the parameter 'compound_id from search_compounds', suggesting this tool is used after searching to get detailed info. However, there's no explicit guidance on when to use this vs. siblings like 'get_evidence' or 'explain_interaction', nor any exclusions or prerequisites stated. The context is clear but lacks direct alternatives or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_evidenceC

Raw evidence bundle: FAERS counts, CYP data, research grades, label warnings. For citing sources.

ParametersJSON Schema
NameRequiredDescriptionDefault
supplementYesSupplement name
drugYesDrug name

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions the tool returns a 'raw evidence bundle' for citation, but doesn't describe the return format (e.g., structured data, text), potential limitations (e.g., data freshness, availability), or any operational constraints (e.g., rate limits, authentication needs). This leaves significant gaps for a tool with no annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded, consisting of a single sentence that directly states the tool's output and purpose. There's no unnecessary elaboration, though it could be slightly more structured (e.g., separating output from usage). Every sentence earns its place by conveying core information efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of retrieving evidence data (involving multiple data types like FAERS and CYP), no annotations, and no output schema, the description is incomplete. It lacks details on the return structure, data sources, reliability, or how the evidence bundle is formatted, which are critical for effective tool use in a medical/contextual domain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with both parameters ('supplement' and 'drug') clearly documented in the schema. The description doesn't add any parameter-specific details beyond what the schema provides, such as format examples or interdependencies. With high schema coverage, the baseline score of 3 is appropriate as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: retrieving a 'raw evidence bundle' containing specific data types (FAERS counts, CYP data, research grades, label warnings) for citation purposes. It uses a specific verb ('get') and resource ('evidence bundle'), though it doesn't explicitly distinguish itself from sibling tools like 'get_compound_info' or 'search_compounds' which might also retrieve related information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal usage guidance, only stating the tool is 'for citing sources.' It doesn't specify when to use this tool versus alternatives like 'get_compound_info' or 'search_compounds,' nor does it mention prerequisites, exclusions, or contextual triggers for its use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_compoundsB

Fuzzy search for supplement compounds. 584 aliases across 95 compounds. Resolves misspellings, brands, abbreviations.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query
limitNoMax results (default 5)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the tool's fuzzy search capability and ability to resolve misspellings, brands, and abbreviations, which adds some behavioral context. However, it doesn't disclose important traits like whether this is a read-only operation, performance characteristics, error handling, or what the output format looks like. For a search tool with zero annotation coverage, this leaves significant gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise and well-structured in a single sentence. Every element earns its place: the core function ('Fuzzy search for supplement compounds'), scale context ('584 aliases across 95 compounds'), and key capabilities ('Resolves misspellings, brands, abbreviations'). There's zero waste or redundancy, making it easy to parse and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (search with fuzzy matching), no annotations, and no output schema, the description provides adequate but incomplete context. It covers what the tool does and some behavioral aspects, but lacks guidance on usage scenarios, output format, error conditions, and performance characteristics. The description is sufficient for basic understanding but leaves important operational details unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description coverage is 100%, with both parameters ('query' and 'limit') having clear descriptions in the schema. The description doesn't add any meaningful parameter semantics beyond what the schema already provides. It doesn't explain query syntax, search algorithms, or result ordering. The baseline score of 3 is appropriate when the schema does the heavy lifting for parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Fuzzy search for supplement compounds' specifies both the verb (search) and resource (supplement compounds). It distinguishes itself from siblings by focusing on search functionality rather than checking interactions, explaining interactions, getting detailed info, or retrieving evidence. However, it doesn't explicitly contrast with sibling tools, preventing a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. While it mentions capabilities like handling misspellings, brands, and abbreviations, it doesn't indicate when to choose this search tool over sibling tools like 'get_compound_info' or 'get_evidence'. There's no mention of prerequisites, typical use cases, or exclusion criteria.

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.

  1. 5 tool updatesv2.0.0
    • First observedcheck_interactions
    • First observedexplain_interaction
    • First observedget_compound_info
    • First observedget_evidence
    • First observedsearch_compounds

TDQS

A3.6/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: checking interactions, explaining them, getting compound info, retrieving evidence, and searching compounds. The descriptions specify unique use cases, making misselection unlikely.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., check_interactions, explain_interaction, get_compound_info, get_evidence, search_compounds). This uniformity enhances readability and predictability for agents.

Tool Count5/5

With 5 tools, the server is well-scoped for its supplement-medication interaction domain. Each tool serves a specific, necessary function, avoiding bloat while covering key operations like search, retrieval, and analysis.

Completeness4/5

The toolset covers core workflows: searching compounds, retrieving info, checking interactions, explaining them, and citing evidence. A minor gap might be the lack of a tool for managing or updating data, but the surface is largely complete for the stated purpose.

Related MCP Connectors

Latest Blog Posts

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/TruthStack1/truthstack-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server