fal.ai MCP by usefulapi
Server Details
Run fal.ai models, poll the inference queue and read model schemas.
- Status
- Healthy
- Uptime
- 54.4% over 21 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- m190/usefulapi-mcp
- GitHub Stars
- 0
TDQS
Scored across 7 tools
Most tools target distinct operations in the queue lifecycle (submit, status, result, cancel, list, schema). The main overlap is falai_run_model, which bundles submit+poll+result, potentially competing with the submit_request/status/result trio, but its description clearly delineates it as a convenience wrapper so agents can tell it apart.
All seven tools follow a uniform falai_ prefix with consistent snake_case verb_noun naming (cancel_request, get_model_schema, get_request_result, get_request_status, list_models, run_model, submit_request). No mixed conventions or ambiguous verbs.
Seven tools is well-scoped for a queue-based inference API, covering discovery, submission, polling, retrieval, cancellation, and a convenience wrapper without redundancy or bloat.
The full async queue lifecycle (submit, status, result, cancel) plus model discovery and schema inspection is covered, and run_model offers a synchronous path. Minor gaps remain, such as model metadata retrieval beyond the schema or any file/asset handling, but core workflows are complete.
Available Tools
7 toolsfalai_cancel_requestCancel requestADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. | |
| request_id | Yes | The queue request id returned when the request was submitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint=true annotation, the description discloses concrete behavior: the tool only affects not-yet-started requests, it is a *request* (202 CANCELLATION_REQUESTED, not a synchronous kill), and it names the underlying endpoint. This is useful context on force/semantics that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with purpose, then return behavior, then the upstream endpoint. No filler or repetition; every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully states the 202/CANCELLATION_REQUESTED response, and eligibility plus target are covered. It omits failure behavior (e.g., what happens if the request already started or the id is unknown), which is a minor but real gap for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both model_id and request_id are already documented with format examples ('fal-ai/flux/schnell', queue request id). The description adds nothing param-specific, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (cancel a request) and immediately narrows scope to 'queued (not-yet-started)', which is the key disambiguator versus siblings like falai_get_request_status or falai_get_request_result. An agent can identify the operation and its applicability without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The qualifier 'queued (not-yet-started)' tells the agent when cancellation is eligible, which is real usage guidance. However, it never names what to do when the request has already started, nor points to an alternative sibling, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_get_model_schemaGet model schemaARead-onlyInspect
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}.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered; the description adds genuine context by disclosing the response shape (components.schemas with input/output fields) and the underlying GET endpoint, which implies a plain fetch with no side effects. It omits any note on failure behavior for an unknown model_id or on caching/rate limits, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: capability first, usage second, raw endpoint last. The endpoint line is slightly redundant for invocation purposes but useful for verification/debugging, and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must describe the return value — and it does, naming components.schemas input/output fields. Combined with the readOnly annotation, an agent has enough to call this correctly; only error handling for an invalid model_id is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single model_id parameter is well documented in the schema (including the 'fal-ai/flux/schnell' example). The description only echoes model_id via the endpoint template, adding no format or constraint detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('Get the OpenAPI 3 schema for a model') and immediately narrows the payload to 'its input/output fields (components.schemas)'. This distinguishes it from siblings like falai_run_model or falai_list_models without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this to learn what inputs a model accepts before submitting' gives a clear triggering condition tied to a workflow step (pre-submission discovery). It does not explicitly name the alternative tools or state when not to use it, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_get_request_resultGet request resultARead-onlyInspect
Get the final output of a COMPLETED queued request. fal.ai queue: GET {queue}/{model_id}/requests/{request_id}.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. | |
| request_id | Yes | The queue request id returned when the request was submitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes the safe-read profile, and the description adds the underlying HTTP endpoint shape (GET {queue}/{model_id}/requests/{request_id}). It does not disclose error behavior for a non-completed or failed request, nor any return payload characteristics, so it adds only modest value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded: the purpose first, then the endpoint detail. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool this is close to adequate, but with no output schema the description should at least characterize the returned payload ('final output' is vague) and note the failure mode when the request is not yet complete. Those gaps leave an agent guessing at edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both model_id and request_id are already fully documented in the schema. The description adds only the implicit notion that these form path segments ('{queue}/{model_id}/requests/{request_id}'), which is marginal beyond the schema's explicit path-segment note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and a precisely scoped resource (the final output of a COMPLETED queued request), which implicitly separates it from falai_get_request_status. It stops short of explicitly naming that sibling, so an agent must infer the boundary rather than being told it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'COMPLETED' implies the precondition for calling this tool, and 'queued request' implies it follows falai_submit_request. However, there is no explicit guidance on what to do while the request is still running (e.g., poll falai_get_request_status) or what happens if the request is not finished.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_get_request_statusGet request statusBRead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| logs | No | Include queue logs in the response (?logs=1). | |
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. | |
| request_id | Yes | The queue request id returned when the request was submitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds the underlying queue endpoint path and the optional logs flag, which is useful operational context, but it omits whether status is terminal/transient or any rate-limit considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the purpose front-loaded, followed by the endpoint detail. No filler, though the raw URL template sits slightly awkwardly beside the prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned status values (IN_QUEUE | IN_PROGRESS | COMPLETED), so the agent knows what to expect. Only the polling/next-step workflow is left unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents model_id, request_id and logs. The description only restates the optional logs=1 flag, adding no syntax or meaning beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the status of a queued request') and enumerates the possible status values. It implicitly separates itself from falai_get_request_result by scoping to status only, but never names that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to call this versus the sibling falai_get_request_result, nor any polling guidance (e.g. call repeatedly until COMPLETED, then fetch the result). The status enum hints at a polling workflow but the agent must infer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_list_modelsList modelsARead-onlyInspect
List or search fal.ai models in the registry (paginated). fal.ai API: GET /models (query: keywords, page, total).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number (default 1). | |
| total | No | Page size (number of models per page). | |
| keywords | No | Optional search string to filter models by. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this is a safe read, so the burden is lighter. The description adds useful context (paginated, and that it maps to GET /models with keywords/page/total query params), but says nothing about result ordering, max page size, or total result counts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action and the pagination caveat front-loaded, plus an endpoint mapping. Every clause carries information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read-only list tool with a fully documented schema and annotations covering safety, this is nearly complete. The only gap is the absence of any hint about the shape of the returned model list, which has no output schema to cover it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (page, total, keywords) are already documented and the baseline is 3. The description restates the parameter names as API query params but adds no format, default, or constraint detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list/search) and resource (fal.ai models in the registry) and notes pagination, so the agent knows exactly what the tool returns. It never names a sibling such as falai_get_model_schema, so the boundary with single-model lookups is left to inference rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the discovery/browse tool because it lists models, but the description gives no explicit when-to-use, when-not-to-use, or alternative (e.g. use get_model_schema once you know the model id).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_run_modelRun model (subscribe)ADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | The model's input object — arbitrary params for that model, e.g. { "prompt": "a cat" }. Use falai_get_model_schema to learn the fields. | |
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. | |
| max_wait_seconds | No | Max seconds to wait for completion (default 60, capped at 300). | |
| poll_interval_seconds | No | Seconds between status polls (default 3, min 1). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the single destructiveHint annotation: it discloses credit consumption, the polling loop, and — most valuably — that a wait-budget timeout returns a { status, request_id, status_url, note } object rather than an error, which prevents the agent from mis-handling a normal outcome as a failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core behavior and followed by the credit cost and the timeout contract. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description covers the non-obvious timeout return shape and names where the eventual result comes from. The success payload itself ('the result') is left generic, but with 100% schema coverage on inputs this is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the 300s cap on max_wait_seconds and the default poll interval, so the schema carries parameter meaning. The description adds only the informal phrase 'wait budget', which is baseline-equivalent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific behavior chain (submit → poll until COMPLETED → return result) rather than just 'run model', and the word 'Convenience' tells the agent this is the synchronous wrapper. It is clearly distinguishable from sibling falai_submit_request (submit only) and the polling siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent on the non-completion path: keep polling with falai_get_request_status / falai_get_request_result. However it never states the inverse condition (when to prefer falai_submit_request for long jobs), so the when-not guidance is partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
falai_submit_requestSubmit requestADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | The model's input object — arbitrary params for that model, e.g. { "prompt": "a cat" }. Use falai_get_model_schema to learn the fields. | |
| model_id | Yes | The fal.ai model id, used raw as a path segment, e.g. 'fal-ai/flux/schnell'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare destructiveHint=true; the description earns its keep by explaining why (consumes fal credits when the model runs) and by disclosing the full return contract (request_id, response_url, status_url, cancel_url, queue_position) plus the underlying POST {queue}/{model_id} semantics. It stops short of explaining polling/cancel follow-up flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the async contract, then the return shape, then the side effect and wire format. No filler and no restatement of the tool title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with no output schema and only a destructiveHint annotation, the description supplies everything the agent needs: async semantics, cost implication, documented return fields, and a pointer for discovering model-specific input fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage the baseline is 3, but the description adds real mapping information: the body equals the model input and model_id is interpolated raw into a path segment. It also actively points to falai_get_model_schema as the way to discover the arbitrary per-model input fields, which the schema itself cannot enumerate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (submit an inference request to the queue) and immediately differentiates its mode of operation: 'return immediately (async — does NOT wait for completion)'. That distinction separates it from the synchronous-sounding sibling falai_run_model without needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The async/does-not-wait framing is a clear when-to-use signal, and it routes the agent to falai_get_model_schema for building the input object. It never explicitly names falai_run_model as the synchronous alternative, so the choose-between guidance is implied rather than stated.
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.
7 tool updates
- Changed
falai_cancel_request1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
falai_get_model_schema1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
falai_get_request_result1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
falai_get_request_status1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
falai_list_models1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
falai_run_model1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
falai_submit_request1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
7 tool updates
- First observed
falai_cancel_request - First observed
falai_get_model_schema - First observed
falai_get_request_result - First observed
falai_get_request_status - First observed
falai_list_models - First observed
falai_run_model - First observed
falai_submit_request
Related MCP Connectors
Run DeepInfra inference, list models and read account rate limits.
Run any Relay model (image, video, audio, LLM), poll tasks, upload files and search Relay's docs.
- Flux AIOAuthart.fluxaipro
Generate images, videos and music with model discovery, cost estimates and asynchronous results.
Run AI models, create deployments, and manage predictions via cloud API
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables Claude Code to run and manage fal.ai queue jobs, including submitting generation requests, checking status, waiting for results, canceling jobs, and downloading finished media files to disk.-
- AlicenseAqualityDmaintenanceEnables MCP clients to run 600+ generative AI models from fal.ai, including image, video, audio, and text, with tools for synchronous and asynchronous execution, model catalog browsing, and schema inspection.81MIT
- AlicenseNot gradedqualityDmaintenanceA FastMCP server that exposes core fal.ai model API operations, enabling model catalogue browsing, search, schema retrieval, inference, queue management, and CDN uploads through natural language.4MIT
- AlicenseAqualityDmaintenanceEnables discovery, search, generation, and management of AI models via fal.ai, allowing Claude Desktop and other MCP clients to interact with fal.ai services.12756 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.