| OPENFDA_API_KEY | No | Free API key from open.fda.gov — increases daily limit from 1K to 120K requests. |
| CANVAS_PROVIDER_TYPE | No | Set to 'duckdb' to enable DataCanvas staging: stage=true or a canvas_id on an openfda_search_* tool or openfda_lookup_ndc stages the matched records as a SQL table, and the openfda_dataframe_* tools are listed. The DuckDB binding ships with the server. |
| OPENFDA_DATAFRAME_DROP_ENABLED | No | Enable openfda_dataframe_drop, which deletes a table staged on a DataCanvas. Off by default; applies only when DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb). |
| OPENFDA_MIRROR_ENABLED | No | Serve exact-key lookups for drug/label, drug/ndc, drug/enforcement, and drug/drugsfda from a local bulk mirror instead of the API. Off by default; the initial harvest runs out-of-band via the mirror:init script. |
| OPENFDA_MIRROR_PATH | No | Directory holding one SQLite file per mirrored dataset. |
| OPENFDA_MIRROR_REFRESH_CRON | No | Cron expression for the in-process mirror refresh. HTTP transport only; stdio operators run mirror:refresh from the host. Requires the optional node-cron peer dependency. |
| OPENFDA_MIRROR_FALLBACK_LIVE | No | Fall back to the live API when the mirror is cold, missing the record, or failing. Disable to fail loudly instead. |
| OPENFDA_MIRROR_REFRESH_TIMEOUT_MS | No | Wall-clock budget for one scheduled refresh before it is aborted. Raise it for drug/label, the only multi-partition dataset. |
| OPENFDA_MIRROR_BASE_URL | No | Host serving the openFDA bulk download manifest. Override only to harvest from a private mirror of the dumps. |
| MCP_LOG_LEVEL | No | Sets the minimum log level for output (e.g., 'debug', 'info', 'warn'). |
| OPENFDA_API_KEY | No | Free API key from open.fda.gov — increases daily limit from 1K to 120K requests. |
| MCP_TRANSPORT_TYPE | No | Selects the HTTP transport. |
| MCP_HTTP_HOST | No | The hostname for the HTTP server. |
| MCP_HTTP_PORT | No | The port to run the HTTP server on. |
| MCP_HTTP_ENDPOINT_PATH | No | The endpoint path for the MCP server. |
| MCP_AUTH_MODE | No | Authentication mode to use: 'none', 'jwt', or 'oauth'. |
| CANVAS_PROVIDER_TYPE | No | Set to 'duckdb' to enable DataCanvas staging: stage=true or a canvas_id on an openfda_search_* tool or openfda_lookup_ndc stages the matched records as a SQL table, and the openfda_dataframe_* tools are listed. The DuckDB binding ships with the server. |
| OPENFDA_DATAFRAME_DROP_ENABLED | No | Enable openfda_dataframe_drop, which deletes a table staged on a DataCanvas. Off by default; applies only when DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb). |
| OPENFDA_MIRROR_ENABLED | No | Serve exact-key lookups for drug/label, drug/ndc, drug/enforcement, and drug/drugsfda from a local bulk mirror instead of the API. Off by default; the initial harvest runs out-of-band via the mirror:init script. |
| OPENFDA_MIRROR_PATH | No | Directory holding one SQLite file per mirrored dataset. |
| OPENFDA_MIRROR_REFRESH_CRON | No | Cron expression for the in-process mirror refresh. HTTP transport only; stdio operators run mirror:refresh from the host. Requires the optional node-cron peer dependency. |
| OPENFDA_MIRROR_FALLBACK_LIVE | No | Fall back to the live API when the mirror is cold, missing the record, or failing. Disable to fail loudly instead. |
| OPENFDA_MIRROR_REFRESH_TIMEOUT_MS | No | Wall-clock budget for one scheduled refresh before it is aborted. Raise it for drug/label, the only multi-partition dataset. |
| OPENFDA_MIRROR_BASE_URL | No | Host serving the openFDA bulk download manifest. Override only to harvest from a private mirror of the dumps. |
| MCP_LOG_LEVEL | No | Sets the minimum log level for output (e.g., 'debug', 'info', 'warn'). |