fal.ai MCP by usefulapi
Run fal.ai models, poll the inference queue and read model schemas.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"falai": {
"url": "https://falai.usefulapi.io/mcp"
}
}
}Remote endpoints
https://falai.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (7)
🟢falai_list_models(keywords, page, total)
List or search fal.ai models in the registry (paginated). fal.ai API: GET /models (query: keywords, page, total).
Input Schema
{
"type": "object",
"properties": {
"keywords": {
"description": "Optional search string to filter models by.",
"type": "string"
},
"page": {
"description": "1-based page number (default 1).",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"total": {
"description": "Page size (number of models per page).",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢falai_get_model_schema(model_id)
Get the OpenAPI 3 schema for a model — its input/output fields (components.schemas). Use this to learn what inputs a model accepts before submitting. fal.ai API: GET /openapi/queue/openapi.json?endpoint_id={model_id}.
Input Schema
{
"type": "object",
"properties": {
"model_id": {
"type": "string",
"minLength": 1,
"description": "The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'."
}
},
"required": [
"model_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢falai_get_request_status(model_id, request_id, logs)
Get the status of a queued request (IN_QUEUE | IN_PROGRESS | COMPLETED). fal.ai queue: GET {queue}/{model_id}/requests/{request_id}/status (optional logs=1).
Input Schema
{
"type": "object",
"properties": {
"model_id": {
"type": "string",
"minLength": 1,
"description": "The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'."
},
"request_id": {
"type": "string",
"minLength": 1,
"description": "The queue request id returned when the request was submitted."
},
"logs": {
"description": "Include queue logs in the response (?logs=1).",
"type": "boolean"
}
},
"required": [
"model_id",
"request_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢falai_get_request_result(model_id, request_id)
Get the final output of a COMPLETED queued request. fal.ai queue: GET {queue}/{model_id}/requests/{request_id}.
Input Schema
{
"type": "object",
"properties": {
"model_id": {
"type": "string",
"minLength": 1,
"description": "The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'."
},
"request_id": {
"type": "string",
"minLength": 1,
"description": "The queue request id returned when the request was submitted."
}
},
"required": [
"model_id",
"request_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴falai_submit_request(model_id, input)
Submit an inference request to the queue and return immediately (async — does NOT wait for completion). Returns { request_id, response_url, status_url, cancel_url, queue_position }. Consumes fal credits when the model runs. fal.ai queue: POST {queue}/{model_id} with body = the model input.
Input Schema
{
"type": "object",
"properties": {
"model_id": {
"type": "string",
"minLength": 1,
"description": "The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'."
},
"input": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "The model's input object — arbitrary params for that model, e.g. { \"prompt\": \"a cat\" }. Use falai_get_model_schema to learn the fields."
}
},
"required": [
"model_id",
"input"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴falai_run_model(model_id, input, max_wait_seconds, poll_interval_seconds)
Convenience 'subscribe': submit a request, poll its status until COMPLETED, then return the result. Consumes fal credits. If it does not complete within the wait budget, returns a { status, request_id, status_url, note } object (NOT an error) so you can keep polling with falai_get_request_status / falai_get_request_result.
Input Schema
{
"type": "object",
"properties": {
"model_id": {
"type": "string",
"minLength": 1,
"description": "The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'."
},
"input": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "The model's input object — arbitrary params for that model, e.g. { \"prompt\": \"a cat\" }. Use falai_get_model_schema to learn the fields."
},
"max_wait_seconds": {
"description": "Max seconds to wait for completion (default 60, capped at 300).",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"poll_interval_seconds": {
"description": "Seconds between status polls (default 3, min 1).",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
},
"required": [
"model_id",
"input"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴falai_cancel_request(model_id, request_id)
Request cancellation of a queued (not-yet-started) request. Returns 202 { status: 'CANCELLATION_REQUESTED' }. fal.ai queue: PUT {queue}/{model_id}/requests/{request_id}/cancel.
Input Schema
{
"type": "object",
"properties": {
"model_id": {
"type": "string",
"minLength": 1,
"description": "The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'."
},
"request_id": {
"type": "string",
"minLength": 1,
"description": "The queue request id returned when the request was submitted."
}
},
"required": [
"model_id",
"request_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence