Read Device Magic forms, submissions, devices and groups; send and revoke dispatches.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
WRITE: approves a device that is waiting for approval (pending_approval is true) so it can receive forms. Approving an approved device has no effect. POST /organizations/{org}/devices/{id}/approve.
Numeric device id (field `id` of list_devices).
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
WRITE: approves a device that is waiting for approval (pending_approval is true) so it can receive forms. Approving an approved device has no effect. POST /organizations/{org}/devices/{id}/approve.
| Argument | Type | Description |
|---|---|---|
| device_id* | integer | Numeric device id (field `id` of list_devices). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"device_id"
],
"properties": {
"device_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Numeric device id (field `id` of list_devices).",
"exclusiveMinimum": 0
}
}
}Metadata of one resource: status, version and, for spreadsheets, its tables and columns. The file content itself is not downloaded. GET /api/resources/{id}/describe.json.
| Argument | Type | Description |
|---|---|---|
| resource_id* | integer | Resource id (field `id` of list_resources). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"resource_id"
],
"properties": {
"resource_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Resource id (field `id` of list_resources).",
"exclusiveMinimum": 0
}
}
}One destination of a form. Credentials and tokens of the destination are never returned. GET /api/forms/{form_id}/destinations/{id}.json.
| Argument | Type | Description |
|---|---|---|
| form_id* | integer | Form id. |
| destination_id* | integer | Destination id (field `id` of list_destinations). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id",
"destination_id"
],
"properties": {
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Form id.",
"exclusiveMinimum": 0
},
"destination_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Destination id (field `id` of list_destinations).",
"exclusiveMinimum": 0
}
}
}One device: id, identifier, owner, description, pending_approval, groups and custom attributes. GET /organizations/{org}/devices/{id}.json.
| Argument | Type | Description |
|---|---|---|
| device_id* | integer | Numeric device id (field `id` of list_devices). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"device_id"
],
"properties": {
"device_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Numeric device id (field `id` of list_devices).",
"exclusiveMinimum": 0
}
}
}One dispatch of a device including the values it was prefilled with. GET /api/v3/devices/{identifier}/dispatches/{id}.json?include_inputs=true.
| Argument | Type | Description |
|---|---|---|
| dispatch_id* | integer | Dispatch id (field `id` of a dispatch list). |
| device_identifier* | string | Device identifier (field `identifier` of a device, e.g. iPhone_abcdef1234567890). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"device_identifier",
"dispatch_id"
],
"properties": {
"dispatch_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Dispatch id (field `id` of a dispatch list).",
"exclusiveMinimum": 0
},
"device_identifier": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Device identifier (field `identifier` of a device, e.g. iPhone_abcdef1234567890)."
}
}
}One form's definition: title and its questions/pages with identifiers and types (the identifiers are the keys inside submissions and dispatch payloads). Optionally a specific version. GET /organizations/{org}/forms/{id}.json.
| Argument | Type | Description |
|---|---|---|
| form_id* | integer | Form id (field `id` of list_forms). |
| version | string | Form version such as 1.03; default = the latest. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Form id (field `id` of list_forms).",
"exclusiveMinimum": 0
},
"version": {
"type": "string",
"maxLength": 40,
"minLength": 1,
"description": "Form version such as 1.03; default = the latest."
}
}
}List where one form's submissions are sent (e-mail, Dropbox, database, ...): id, active flag, format and transport types, timestamps. GET /api/forms/{id}/destinations.json.
| Argument | Type | Description |
|---|---|---|
| form_id* | integer | Form id (field `id` of list_forms). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Form id (field `id` of list_forms).",
"exclusiveMinimum": 0
}
}
}Outstanding dispatches of one device. GET /api/v2/devices/{identifier}/dispatches.json.
| Argument | Type | Description |
|---|---|---|
| device_identifier* | string | Device identifier (field `identifier` of a device, e.g. iPhone_abcdef1234567890). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"device_identifier"
],
"properties": {
"device_identifier": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Device identifier (field `identifier` of a device, e.g. iPhone_abcdef1234567890)."
}
}
}List the organization's devices (phones, tablets, web-form users): id, identifier, owner, description, group and whether approval is pending. GET /organizations/{org}/devices.json.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Devices and web-forms users a dispatch can be sent to (first 100 by default; use items and page for more). GET /api/v3/dispatch_authors.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based. |
| items | integer | Results per page (default 100). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Page number, 1-based."
},
"items": {
"type": "integer",
"maximum": 1000,
"minimum": 1,
"description": "Results per page (default 100)."
}
}
}Outstanding dispatches (prefilled forms pushed to devices and not yet completed) of the whole organization: id, form name and namespace, device, scheduled time. Dispatch is an Enterprise-plan feature. GET /api/v2/organizations/{org}/dispatches.json.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List the organization's forms: id, namespace (the form's unique id used for dispatching), version, description and group. GET /organizations/{org}/forms.json.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}List the organization's groups (which devices see which forms), optionally narrowed by a name filter or by tags. GET /api/v2/organizations/{org}/groups.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based (default 1). |
| tags | array | Only groups having any of these tags (the vendor matches any tag). |
| filter | string | Group name to look for, e.g. Default (the vendor matches part of the name). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Page number, 1-based (default 1)."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"maxItems": 20,
"description": "Only groups having any of these tags (the vendor matches any tag)."
},
"filter": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Group name to look for, e.g. Default (the vendor matches part of the name)."
}
}
}List the organization's resources (lookup tables and files used by forms): id, original filename, version, description. GET /api/resources.json.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Submitted data of one form, newest data as stored in the form's Device Magic Database destination (it must be active on that form). Each record has form info, metadata (device, user, submitted_at, received_at, submission_id) and the answers. The reply says current_page, total_pages and total_count. Filter by from_date/to_date (yyyy-mm-dd). GET /api/forms/{id}/device_magic_database.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number, 1-based (use total_pages from the reply). |
| form_id* | integer | Form id (field `id` of list_forms). |
| to_date | string | Only submissions up to this date (yyyy-mm-dd). |
| per_page | integer | Submissions per page, 1-100 (default 25). |
| from_date | string | Only submissions from this date (yyyy-mm-dd). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"form_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"minimum": 1,
"description": "Page number, 1-based (use total_pages from the reply)."
},
"form_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Form id (field `id` of list_forms).",
"exclusiveMinimum": 0
},
"to_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Only submissions up to this date (yyyy-mm-dd)."
},
"per_page": {
"type": "integer",
"maximum": 100,
"minimum": 1,
"description": "Submissions per page, 1-100 (default 25)."
},
"from_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Only submissions from this date (yyyy-mm-dd)."
}
}
}WRITE: withdraws one outstanding dispatch from a device (the form disappears from the device). It cannot be undone, but the dispatch can be sent again. DELETE /api/v2/devices/{identifier}/dispatches/{id}.json.
| Argument | Type | Description |
|---|---|---|
| confirm* | boolean | Must be true: you confirm the dispatch is withdrawn from the device. |
| dispatch_id* | integer | Dispatch id (from list_device_dispatches). |
| device_identifier* | string | Device identifier (field `identifier` of a device, e.g. iPhone_abcdef1234567890). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"device_identifier",
"dispatch_id",
"confirm"
],
"properties": {
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: you confirm the dispatch is withdrawn from the device."
},
"dispatch_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Dispatch id (from list_device_dispatches).",
"exclusiveMinimum": 0
},
"device_identifier": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Device identifier (field `identifier` of a device, e.g. iPhone_abcdef1234567890)."
}
}
}WRITE: pushes a form, optionally prefilled, to one device where its user will see it (like assigning a job). Not idempotent: calling it twice sends two dispatches. Needs the Enterprise plan. The form is named by its namespace (list_forms); `payload` maps question identifiers (get_form) to prefilled values (subforms = nested objects, repeat groups = arrays). POST /api/v2/devices/{identifier}/dispatches.json.
| Argument | Type | Description |
|---|---|---|
| confirm* | boolean | Must be true: you confirm the form is sent to this device now (its user sees it). |
| payload | object | Prefilled values keyed by question identifier. |
| form_name | string | Title shown to the device user. |
| scheduled_at | string | When the dispatch becomes due, ISO 8601 such as 2026-11-02T09:00:00Z. |
| form_namespace* | string | Form namespace (field `namespace` of list_forms). |
| form_description | string | Description shown to the device user (Device Magic allows at most 255 characters). |
| device_identifier* | string |
| Device identifier (field `identifier` of a device, e.g. iPhone_abcdef1234567890). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"device_identifier",
"form_namespace",
"confirm"
],
"properties": {
"confirm": {
"type": "boolean",
"const": true,
"description": "Must be true: you confirm the form is sent to this device now (its user sees it)."
},
"payload": {
"type": "object",
"description": "Prefilled values keyed by question identifier.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
},
"form_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Title shown to the device user."
},
"scheduled_at": {
"type": "string",
"maxLength": 40,
"minLength": 10,
"description": "When the dispatch becomes due, ISO 8601 such as 2026-11-02T09:00:00Z."
},
"form_namespace": {
"type": "string",
"maxLength": 500,
"minLength": 1,
"description": "Form namespace (field `namespace` of list_forms)."
},
"form_description": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Description shown to the device user (Device Magic allows at most 255 characters)."
},
"device_identifier": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Device identifier (field `identifier` of a device, e.g. iPhone_abcdef1234567890)."
}
}
}