Forms On Fire / Appenate MCP by usefulapi
Read mobile forms, entries, users and tasks; create confirmed draft or sent tasks for field workers.
我該用這個嗎
品質與安全性
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"forms-on-fire": {
"url": "https://forms-on-fire.usefulapi.io/mcp"
}
}
}遠端端點
https://forms-on-fire.usefulapi.io/mcpstreamable-http它能做什麼
工具清單
工具(11)
🟢formsonfire_list_forms(page_no, page_size)
List the forms (screens) in the organization with id, name, version and status. Use a form id with formsonfire_get_form or formsonfire_search_entries. GET /screen/form/search.
輸入結構描述
{
"type": "object",
"properties": {
"page_no": {
"description": "Page number, starting at 0 (default 0). Pass the previous reply's next_page_no.",
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"page_size": {
"description": "Results per page, 1-250 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formsonfire_get_form(id, external_id, version, status)
One form's definition: name, version, status and its fields (names and types, which are the names to use for prefilled answers). Give the form's id (GUID) or its external id. GET /screen/form.
輸入結構描述
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Form id (GUID)."
},
"external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Form external id."
},
"version": {
"description": "Form version (default: the latest published).",
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"status": {
"description": "Form status (default: Published).",
"type": "string",
"enum": [
"Published",
"Draft",
"Archived"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formsonfire_search_entries(form_id, form_external_id, form_version, from_date, to_date, ...)
Search submitted form entries (the completed forms your team sent in): who filled them, when, where (GPS) and every answer. Filter by form id or external id, version and a date range (by received time, or complete time via order_by). Returns the page of Entries with TotalRows. GET /formentry/search.
輸入結構描述
{
"type": "object",
"properties": {
"form_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Only entries of this form (id, GUID)."
},
"form_external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Only entries of the form with this external id."
},
"form_version": {
"description": "Form version; 0 or omitted = the latest published version, -1 = all versions.",
"type": "integer",
"minimum": -1,
"maximum": 100000
},
"from_date": {
"type": "string",
"description": "ISO 8601 UTC date (2026-10-01) or date-time (2026-10-01T08:00:00Z)."
},
"to_date": {
"type": "string",
"description": "ISO 8601 UTC date (2026-10-01) or date-time (2026-10-01T08:00:00Z)."
},
"answer_format": {
"description": "How form answers are shaped: Flat (one value per field, easiest to read), Rich (typed values) or Raw (as stored). Default: the vendor's default.",
"type": "string",
"enum": [
"Flat",
"Rich",
"Raw"
]
},
"fields": {
"description": "Comma-separated field names to return (works with answer_format Flat).",
"type": "string",
"minLength": 1,
"maxLength": 500
},
"order_by": {
"description": "Sort and date-filter by ReceivedTime (default) or CompleteTime (when the form was completed on the device).",
"type": "string",
"enum": [
"ReceivedTime",
"CompleteTime"
]
},
"date_order": {
"description": "Sort direction (default Ascending, oldest first).",
"type": "string",
"enum": [
"Ascending",
"Descending"
]
},
"media_as_url": {
"description": "Return photos/signatures as URLs instead of embedded data.",
"type": "boolean"
},
"page_no": {
"description": "Page number, starting at 0 (default 0). Pass the previous reply's next_page_no.",
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"page_size": {
"description": "Results per page, 1-250 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formsonfire_search_tasks(user_email, user_external_id, status, template_id, name, ...)
Search tasks (jobs assigned to field workers, each with one or more activities such as filling out a form): status, assignee, due time, activities and history. Filter by assignee, status, name, task template and date range. Returns the page of Tasks with TotalRows. GET /task/search.
輸入結構描述
{
"type": "object",
"properties": {
"user_email": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Only tasks of the user with this email."
},
"user_external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Only tasks of the user with this external id."
},
"status": {
"description": "Only tasks in this status.",
"type": "string",
"enum": [
"Draft",
"InProgress",
"Completed",
"Accepted",
"Rejected"
]
},
"template_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Only tasks created from this task template id."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Task name."
},
"from_date": {
"type": "string",
"description": "ISO 8601 UTC date (2026-10-01) or date-time (2026-10-01T08:00:00Z)."
},
"to_date": {
"type": "string",
"description": "ISO 8601 UTC date (2026-10-01) or date-time (2026-10-01T08:00:00Z)."
},
"retrieve_entries": {
"description": "Also return the form entries completed by the task's activities.",
"type": "boolean"
},
"answer_format": {
"description": "How form answers are shaped: Flat (one value per field, easiest to read), Rich (typed values) or Raw (as stored). Default: the vendor's default.",
"type": "string",
"enum": [
"Flat",
"Rich",
"Raw"
]
},
"page_no": {
"description": "Page number, starting at 0 (default 0). Pass the previous reply's next_page_no.",
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"page_size": {
"description": "Results per page, 1-250 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formsonfire_get_task(id, retrieve_entries, answer_format)
One task by its id (GUID), with activities and history. GET /task.
輸入結構描述
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Task id (GUID)."
},
"retrieve_entries": {
"description": "Also return the form entries completed by the task's activities.",
"type": "boolean"
},
"answer_format": {
"description": "How form answers are shaped: Flat (one value per field, easiest to read), Rich (typed values) or Raw (as stored). Default: the vendor's default.",
"type": "string",
"enum": [
"Flat",
"Rich",
"Raw"
]
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴formsonfire_create_task(user_email, user_id, user_external_id, name, icon, ...)
WRITE: create a task for a field worker with one form to fill out, optionally with prefilled answers. By default it remains a draft; send_immediate=true sends it and notifies the worker. Identify the worker by email, user id or external id (list_users). The form is identified by its external id (formsonfire_get_form shows field names for the prefilled answers). Requires confirm=true and a due time. Not idempotent: calling twice creates two tasks. POST /task.
輸入結構描述
{
"type": "object",
"properties": {
"user_email": {
"description": "Email of the worker (user) the task is assigned to.",
"type": "string",
"maxLength": 200,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"user_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Id (GUID) of the worker the task is assigned to."
},
"user_external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "External id of the worker the task is assigned to."
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Task name shown on the device, e.g. 'Site inspection - Acme'."
},
"icon": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Task icon name (vendor icon list), e.g. Clock."
},
"start_by": {
"description": "When the task should be started (ISO 8601 UTC).",
"type": "string"
},
"complete_by": {
"type": "string",
"description": "Due time (ISO 8601 UTC)."
},
"additional_info": {
"description": "Free-text instructions shown with the task.",
"type": "string",
"maxLength": 2000
},
"confirm": {
"type": "boolean",
"const": true,
"description": "Set true only after the user approved creating the task and any requested notification."
},
"send_immediate": {
"description": "Notify the worker right away (vendor default applies when omitted).",
"type": "boolean"
},
"form_external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "External id of the form the worker has to fill out."
},
"instruction": {
"description": "Instruction shown for this form activity.",
"type": "string",
"maxLength": 1000
},
"answers": {
"description": "Prefilled answers: field data name and value.",
"maxItems": 200,
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "The field's data name in the form."
},
"value": {
"type": "string",
"maxLength": 4000,
"description": "The prefilled value."
}
},
"required": [
"name",
"value"
]
}
}
},
"required": [
"complete_by",
"confirm",
"form_external_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formsonfire_list_users(page_no, page_size)
List the organization's users (field workers and admins): name, email, status, groups, website role and last activity. Passwords and keys are never returned. GET /user/search.
輸入結構描述
{
"type": "object",
"properties": {
"page_no": {
"description": "Page number, starting at 0 (default 0). Pass the previous reply's next_page_no.",
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"page_size": {
"description": "Results per page, 1-250 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formsonfire_get_user(id)
One user by id (GUID): name, status, groups, folders, role and registered devices. GET /user.
輸入結構描述
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "User id (GUID)."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formsonfire_list_groups(name, external_id, page_no, page_size)
List user groups with their id, name and member user ids. Filter by name or external id. Returns UserGroups with TotalRows. GET /usergroup/search.
輸入結構描述
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Group name."
},
"external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Group external id."
},
"page_no": {
"description": "Page number, starting at 0 (default 0). Pass the previous reply's next_page_no.",
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"page_size": {
"description": "Results per page, 1-250 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formsonfire_list_data_sources(name, page_no, page_size)
List the data sources (lookup tables that feed dropdowns and prefill in forms, such as customers, sites or products): id, external id, name and row count. Use formsonfire_get_data_source for the rows. GET /datasource/search.
輸入結構描述
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Data source name."
},
"page_no": {
"description": "Page number, starting at 0 (default 0). Pass the previous reply's next_page_no.",
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"page_size": {
"description": "Results per page, 1-250 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 250
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢formsonfire_get_data_source(id, external_id, return_rows, page_no, page_size)
One data source by id (GUID) or external id: its column headers, TotalRows and (with return_rows) a page of rows. Rows are only returned when return_rows is true; page through them with page_no. GET /datasource.
輸入結構描述
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Data source id (GUID)."
},
"external_id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Data source external id."
},
"return_rows": {
"description": "Also return the rows (default false: headers and total only).",
"type": "boolean"
},
"page_no": {
"description": "Page number, starting at 0 (default 0). Pass the previous reply's next_page_no.",
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"page_size": {
"description": "Rows per page, 1-1250 (default 50).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 1250
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社群
證據