Skip to main content
Glama
rdwj

FastMCP Server Template

by rdwj

FDA MCP Server

An MCP (Model Context Protocol) server that provides FDA medical device verification capabilities for prior authorization workflows. Queries the FDA 510(k) database to verify device clearance status and make PA approval decisions.

Features

  • Device Search: Search FDA 510(k) database by K-number, device name, manufacturer, or product code

  • Fuzzy Matching: Intelligent fuzzy search with confidence scoring when exact identifiers aren't available

  • PA Verification: Analyze FDA search results and make prior authorization approval decisions

  • Confidence Scoring: Each result includes confidence scores based on match quality

  • OpenShift Deployment: Production-ready deployment to Red Hat OpenShift

Related MCP server: FastMCP Demo Server

Tools

search_fda_device

Unified FDA search tool that accepts any combination of identifiers or descriptive information.

Parameters:

  • device_identifiers (optional): FDA identifiers (k_number, pma_number, product_code, udi)

  • device_description (optional): Device info for fuzzy search (device_name, manufacturer)

  • search_options (optional): Search options (fuzzy_search, max_results)

Search Strategies (in priority order):

  1. K-number exact match (confidence: 1.0)

  2. Product code + fuzzy name (confidence: 0.75-0.9)

  3. Fuzzy name/manufacturer search (confidence: 0.5-0.6)

Example:

# Exact K-number search
result = await client.call_tool("search_fda_device", {
    "device_identifiers": {"k_number": "K223677"}
})

# Fuzzy search by device name
result = await client.call_tool("search_fda_device", {
    "device_description": {
        "device_name": "Lexie Lumen",
        "manufacturer": "hearX"
    },
    "search_options": {"fuzzy_search": True}
})

# Search by product code (hearing aids)
result = await client.call_tool("search_fda_device", {
    "device_identifiers": {"product_code": "QUH"},  # OTC hearing aids
    "device_description": {"device_name": "hearing aid"}
})

verify_fda_approval

Analyze FDA search results and make PA approval decision with structured reasoning.

Parameters:

  • fda_search_results: Results from search_fda_device tool

  • pa_requirements (optional): PA requirements (required_device_class, require_otc, require_cleared_or_approved)

Returns:

  • Approval decision (approve/deny)

  • Requirements check details

  • Human-readable reasoning

  • Action items for next steps

Example:

# First search for the device
search_result = await client.call_tool("search_fda_device", {
    "device_identifiers": {"k_number": "K223677"}
})

# Then verify for PA approval
verification = await client.call_tool("verify_fda_approval", {
    "fda_search_results": search_result["data"]["results"],
    "pa_requirements": {
        "required_device_class": "2",
        "require_otc": True,
        "require_cleared_or_approved": True
    }
})

Quick Start

Local Development

# Install dependencies
make install

# Run locally with STDIO transport
make run-local

# Test with cmcp
cmcp ".venv/bin/python -m src.main" tools/list

Deploy to OpenShift

# One-command deployment
make deploy

# Or deploy to specific project
make deploy PROJECT=davinci-mcp

Product Codes Reference

Common FDA product codes for hearing devices:

Code

Description

QUH

OTC Self-Fitting Air-Conduction Hearing Aid

OSM

Prescription Hearing Aid

LYY

Cochlear Implant System

Response Schema

All tools return structured responses:

{
  "success": true,
  "data": {
    "search_strategy": "identifier",
    "results": [...],
    "result_count": 1
  },
  "warnings": [],
  "confidence": 1.0,
  "metadata": {
    "execution_time_ms": 245,
    "data_source": "FDA 510(k) Database",
    "search_type": "k_number_exact"
  }
}

Environment Variables

  • MCP_TRANSPORT - Transport type (stdio/http)

  • MCP_HTTP_HOST - HTTP host (default: 0.0.0.0)

  • MCP_HTTP_PORT - HTTP port (default: 8080)

  • MCP_HTTP_PATH - HTTP endpoint path (default: /mcp/)

License

MIT License - see LICENSE for details.

Available Tools

1 tool
search_fda_deviceB
Read-onlyIdempotent

Unified FDA search tool that accepts any combination of identifiers or descriptive information. Automatically determines optimal search strategy.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_identifiersNoFDA identifiers if available (k_number, pma_number, product_code, udi)
device_descriptionNoDevice descriptive information for fuzzy search (device_name, manufacturer)
search_optionsNoSearch options (fuzzy_search, max_results)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, covering safety and idempotency. The description adds that it 'automatically determines optimal search strategy', which provides useful behavioral context beyond annotations, but doesn't detail rate limits, authentication needs, or other traits.

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 with two sentences that efficiently convey the tool's purpose and key feature. It's front-loaded with the main action and could be slightly improved by structuring usage hints, but it's well-sized with no wasted words.

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

Completeness4/5

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

Given the tool has annotations covering safety and idempotency, 100% schema coverage, and an output schema (which means return values are documented elsewhere), the description is reasonably complete. It adds value by explaining the unified search approach, though it lacks usage guidelines.

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 fully documents the three parameters. The description mentions 'identifiers or descriptive information' and 'automatically determines optimal search strategy', which adds some high-level context but no specific semantics beyond what the schema provides.

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 performs a 'search' operation on FDA devices and accepts 'any combination of identifiers or descriptive information', which is specific. However, it doesn't distinguish from siblings since there are none, so it can't achieve the highest score for sibling differentiation.

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, prerequisites, or specific scenarios. It only mentions it 'automatically determines optimal search strategy', which is a feature but not usage guidance.

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. 1 tool updatev0.3.0
    • First observedsearch_fda_device

TDQS

B3.2/5.0
Disambiguation5/5

With only one tool, there is no possibility of confusion or overlap between tools. The tool has a clear and distinct purpose focused on FDA device searches.

Naming Consistency5/5

The single tool name follows a consistent verb_noun pattern (search_fda_device), and with no other tools to compare, there is no inconsistency. The naming is straightforward and descriptive.

Tool Count2/5

A single tool is too few for most practical server purposes, as it severely limits functionality and scope. This feels thin and incomplete for any domain beyond a trivial or highly specialized use case.

Completeness1/5

The tool set is severely incomplete; with only one search tool, there are obvious gaps such as create, update, delete, or other CRUD operations. It lacks coverage for any meaningful lifecycle or domain workflows beyond basic searching.

Maintenance

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A basic MCP server template that provides a foundation for building custom tools, resources, and prompts. Serves as a starting point for developers to create their own MCP server functionality.
    -
  • F
    license
    A
    quality
    D
    maintenance
    A production-ready MCP server that provides hackathon resources and reusable starter prompts. Built with FastMCP framework and includes comprehensive deployment options for development and production environments.
    1
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    A production-ready Python template for building MCP servers with enterprise features including registry integration, configuration management, structured logging, and extensible patterns for tools, resources, and prompts.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A production-ready Model Context Protocol server template in TypeScript that enables building MCP servers with dynamic tool registration, dual transport (stdio + HTTP), and pluggable authentication.
    15
    MIT

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/rdwj/fda-mcp'

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