Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Query FDA data on drugs, food, devices, and recalls via openFDA. STDIO or Streamable HTTP.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
OPENFDA_API_KEY, CANVAS_PROVIDER_TYPE, OPENFDA_DATAFRAME_DROP_ENABLED, OPENFDA_MIRROR_ENABLED, OPENFDA_MIRROR_PATH, OPENFDA_MIRROR_REFRESH_CRON, OPENFDA_MIRROR_FALLBACK_LIVE, OPENFDA_MIRROR_REFRESH_TIMEOUT_MS, OPENFDA_MIRROR_BASE_URL, MCP_LOG_LEVELต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
ใช้ได้ทั้ง Claude บนเว็บ แอปคอมพิวเตอร์ และมือถือ:
https://openfda.caseyjhand.com/mcpเปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"openfda": {
"command": "npx",
"args": [
"-y",
"@cyanheads/openfda-mcp-server"
],
"env": {
"OPENFDA_API_KEY": "ใส่ค่าของคุณ",
"CANVAS_PROVIDER_TYPE": "ใส่ค่าของคุณ",
"OPENFDA_DATAFRAME_DROP_ENABLED": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_ENABLED": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_PATH": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_REFRESH_CRON": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_FALLBACK_LIVE": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_REFRESH_TIMEOUT_MS": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_BASE_URL": "ใส่ค่าของคุณ",
"MCP_LOG_LEVEL": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add --transport http openfda https://openfda.caseyjhand.com/mcpclaude mcp add openfda --env OPENFDA_API_KEY='ใส่ค่าของคุณ' --env CANVAS_PROVIDER_TYPE='ใส่ค่าของคุณ' --env OPENFDA_DATAFRAME_DROP_ENABLED='ใส่ค่าของคุณ' --env OPENFDA_MIRROR_ENABLED='ใส่ค่าของคุณ' --env OPENFDA_MIRROR_PATH='ใส่ค่าของคุณ' --env OPENFDA_MIRROR_REFRESH_CRON='ใส่ค่าของคุณ' --env OPENFDA_MIRROR_FALLBACK_LIVE='ใส่ค่าของคุณ' --env OPENFDA_MIRROR_REFRESH_TIMEOUT_MS='ใส่ค่าของคุณ' --env OPENFDA_MIRROR_BASE_URL='ใส่ค่าของคุณ' --env MCP_LOG_LEVEL='ใส่ค่าของคุณ' -- npx -y @cyanheads/openfda-mcp-serverเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"openfda": {
"url": "https://openfda.caseyjhand.com/mcp"
}
}
}วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"openfda": {
"command": "npx",
"args": [
"-y",
"@cyanheads/openfda-mcp-server"
],
"env": {
"OPENFDA_API_KEY": "ใส่ค่าของคุณ",
"CANVAS_PROVIDER_TYPE": "ใส่ค่าของคุณ",
"OPENFDA_DATAFRAME_DROP_ENABLED": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_ENABLED": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_PATH": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_REFRESH_CRON": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_FALLBACK_LIVE": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_REFRESH_TIMEOUT_MS": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_BASE_URL": "ใส่ค่าของคุณ",
"MCP_LOG_LEVEL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"openfda": {
"type": "http",
"url": "https://openfda.caseyjhand.com/mcp"
}
}
}วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"openfda": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@cyanheads/openfda-mcp-server"
],
"env": {
"OPENFDA_API_KEY": "ใส่ค่าของคุณ",
"CANVAS_PROVIDER_TYPE": "ใส่ค่าของคุณ",
"OPENFDA_DATAFRAME_DROP_ENABLED": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_ENABLED": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_PATH": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_REFRESH_CRON": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_FALLBACK_LIVE": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_REFRESH_TIMEOUT_MS": "ใส่ค่าของคุณ",
"OPENFDA_MIRROR_BASE_URL": "ใส่ค่าของคุณ",
"MCP_LOG_LEVEL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ChatGPT ต่อได้เฉพาะ server ที่อยู่บนอินเทอร์เน็ต:
https://openfda.caseyjhand.com/mcpชื่อเมนูอาจต่างกันเล็กน้อยตามแพ็กเกจและรุ่นของแอป
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
OPENFDA_API_KEY envCANVAS_PROVIDER_TYPE envOPENFDA_DATAFRAME_DROP_ENABLED envOPENFDA_MIRROR_ENABLED envOPENFDA_MIRROR_PATH envOPENFDA_MIRROR_REFRESH_CRON envOPENFDA_MIRROR_FALLBACK_LIVE envOPENFDA_MIRROR_REFRESH_TIMEOUT_MS envOPENFDA_MIRROR_BASE_URL envMCP_LOG_LEVEL envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
ยังไม่ได้อ่านรายการเครื่องมือของตัวนี้ เราตรวจ endpoint ทีละชุดวนไป
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub cyanheads ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป
ยังไม่ได้ตรวจ เราตรวจ endpoint ทีละชุดวนไป
ยังไม่ได้ตรวจ เราอ่านรายการเครื่องมือตอนตรวจ endpoint
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
ได้ทั้งสองแบบ จะลงในเครื่องหรือต่อผ่านคลาวด์ก็ได้
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.9.1) เข้า registry 11 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต่อผ่าน URL จึงใช้กับโปรแกรมที่รับ remote MCP ได้ เช่น ChatGPT ที่เปิดโหมดนักพัฒนา
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, sync. labs
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Lipsync videos, dub them into other languages, make talking videos and open sync. Studio.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
@cyanheads/openfda-mcp-server Query FDA data on drugs, food, devices, and recalls via openFDA. STDIO or Streamable HTTP. 15 Tools
Public Hosted Server: https://openfda.caseyjhand.com/mcp
FDA data on drugs, food, devices, and recalls from the openFDA public API. Search adverse events, recalls, drug approvals, and device clearances; look up NDC codes and drug labels; aggregate field counts across any endpoint.
| Tool | Description |
|---|---|
openfda_drug_profile | One drug name → consolidated FDA profile: identity, label, adverse events, recalls, approval, shortage |
openfda_search_adverse_events | Search adverse event reports across drugs, food, and devices |
openfda_search_animal_events | Search adverse event reports for veterinary drugs and devices |
openfda_search_drug_shortages | Search FDA drug shortage records by status, availability, therapeutic category, manufacturer |
openfda_search_tobacco_reports | Search problem reports for tobacco products, e-cigarettes, and vaping devices |
openfda_search_recalls | Search enforcement reports and recall actions across drugs, food, and devices |
openfda_count_values | Aggregate and tally unique values for any field across any openFDA endpoint |
openfda_describe_fields | Return searchable field paths for an openFDA endpoint, grouped by category |
openfda_get_drug_label | Look up FDA drug labeling (package inserts / SPL documents) |
openfda_search_drug_approvals | Search the Drugs@FDA database for NDA/ANDA application approvals |
openfda_search_device_clearances | Search FDA device premarket notifications: 510(k) clearances and PMA approvals |
openfda_lookup_ndc | Look up drugs in the NDC (National Drug Code) Directory |
openfda_dataframe_describe | List tables and column schemas staged on a DataCanvas |
openfda_dataframe_query | Run read-only SQL over a result set staged on a DataCanvas |
openfda_dataframe_drop | Delete one table staged on a DataCanvas (opt-in, off by default) |
openfda_drug_profile tooldrug name, brand or generic, resolved once to an identity (generic name, NDC, RxCUI, SPL set ID); recalls, approval, and shortage key on meta.fanOutKey — the typed name when it is an ingredient of the resolved generic, else that generic; meta.resolvedVia (label, ndc, none) names the source, and a single-ingredient product is preferred over combinationsproduct_description, products.active_ingredients.name); recalls_total gives the match count beside the newest 5 recallslabel, adverse_events, recalls, approval, and shortage are best-effort and come back null (or an empty recalls) on a miss; degraded[] names each section whose sub-query failed upstream, so a listed section is unknown rather than absentopenfda_search_adverse_events toolcategory (drug, food, device) selects the endpoint and its record schema; up to 1000 records per pagereceivedate (drug), date_created (food), date_received (device); another category's field fails as query_errorvia oral (048), fatal (5), elderly (6)); structured output keeps the codesopenfda_search_animal_events toolsearch over veterinary reports, e.g. animal.species, drug.active_ingredients.name, reaction.veddra_term_name, serious_ae; up to 1000 records per pageMSK on every record, so search by active ingredient; drug.manufacturer.registration_number narrows to one approvalopenfda_search_drug_shortages toolsearch over status (Current / To Be Discontinued / Resolved), therapeutic_category, generic_name, or company_name; up to 1000 records per pageopenfda block carries brand_name, product_ndc, and rxcui for chaining into openfda_get_drug_label or openfda_lookup_ndcopenfda_search_tobacco_reports toolsearch over tobacco_products, reported_health_problems, reported_product_problems, or nonuser_affected; up to 1000 records per pagenumber_tobacco_products, number_health_problems, and number_product_problems countsopenfda_search_recalls toolcategory (drug, food, device) plus endpoint: enforcement (default, every category) or recall (devices only; other categories fail as recall_endpoint_non_device); up to 1000 records per pagerecall_number, classification (Class I/II/III), and status; device recall records carry product_res_number and recall_status instead, with no hazard classificationopenfda_count_values toolendpoint (any of the 20 openFDA endpoints), a count field expression, and an optional search; returns up to 1000 top terms (default 100), ranked by count; a date field returns one term per distinct YYYYMMDD date, ranked the same waytruncated flags more distinct terms past limit, except at the 1000-term maximum, where a notice says completeness can't be known (a date count is exact at any limit, since openFDA sends every date); an expression openFDA can't aggregate fails as not_aggregatable (take the countAs form from openfda_describe_fields)openfda_describe_fields toolendpoint: the same 20 endpoints openfda_count_values acceptstype, a description, and countAs (the verified count expression, or null when the field can't be aggregated), plus queryTips on quoting, AND/OR, .exact, and date rangesopenfda_get_drug_label toolsearch on label fields (openfda.brand_name, openfda.generic_name, openfda.manufacturer_name, set_id); limit defaults to 5, max 1000kind: "outline" (section names and sizes, largest first) instead of label text; re-call with sections: [...] to get those sections plus identity metadata (openfda, set_id, id, effective_time, version), returned whole even when over budget*_table sections render as Markdown tables in the text output; structured results keep the raw SPL markupopenfda_search_drug_approvals toolsearch over openfda.brand_name, sponsor_name (stored uppercase, so a lowercase quoted value matches nothing), submissions.submission_type, or submissions.review_priority; up to 1000 records per pageapplication_number, sponsor_name, products[], and the application's full submissions[] historyopenfda_search_device_clearances toolpathway (510k or pma, one per call) plus an optional search over applicant, product_code, advisory_committee_description, or openfda.device_name; up to 1000 records per pagek_number, device_name, and decision_date; PMA records carry pma_number, trade_name, and supplement_numberopenfda_lookup_ndc toolsearch over product_ndc, brand_name, generic_name, openfda.manufacturer_name, or active_ingredients.name; up to 1000 records per pageproduct_ndc, labeler_name, dosage_form, route, marketing_category, active_ingredients[], and packaging[]openfda_dataframe_describe toolcanvas_id from a staged search; lists each table's name, kind, full staged row_count, and columns with DuckDB type and nullabilitycanvas_disabled when CANVAS_PROVIDER_TYPE=none, or canvas_not_found when the canvas_id has expired or never existedopenfda_dataframe_query toolcanvas_id plus one read-only SELECT; DDL, DML, COPY, and file-reading functions are rejected. Scalars are stored as text (CAST for math) and nested openFDA blocks as JSON columnstruncated: true means page on with ORDER BY plus LIMIT/OFFSET; failures are canvas_disabled, canvas_not_found, missing_table, or invalid_queryopenfda_dataframe_drop toolOPENFDA_DATAFRAME_DROP_ENABLED=true to make it callable; otherwise it is listed as disabled on the landing page and absent from tools/listcanvas_id plus the table name from openfda_dataframe_describe; deletes that one table or view and returns remaining_tables, leaving the canvas and its other tables in placecanvas_disabled, canvas_not_found, or missing_table (already dropped, expired, or mistyped)Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
openFDA-specific:
ตัดมาแค่ช่วงต้น อ่านต่อใน repo