GoCanvas MCP by usefulapi
Read GoCanvas forms, submissions, users, dispatches and reference data; create dispatches.
사용해야 할까요
품질 및 안전성
발견 사항 (9)
- LOWgocanvas_get_submission에서
- LOWgocanvas_list_submission_revisions에서
- LOWgocanvas_list_departments에서
- LOWgocanvas_list_department_users에서
- LOWgocanvas_list_dispatches에서
- LOWgocanvas_get_dispatch에서
- LOWgocanvas_list_reference_data에서
- LOWgocanvas_list_submission_revisions에서
- LOWgocanvas_mark_dispatch_received에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"gocanvas": {
"url": "https://gocanvas.usefulapi.io/mcp"
}
}
}원격 엔드포인트
https://gocanvas.usefulapi.io/mcpstreamable-http할 수 있는 일
도구 목록
도구 (23)
🟢gocanvas_get_me
The user who owns the connected OAuth application: id, login, company id and name, default department and role. Use it to learn the default department id.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_forms(assigned, page)
Forms (mobile form definitions) the connected user can see: id, name, status, version, department. Paged, 100 per page. Use gocanvas_get_form for a form's fields (entries).
입력 스키마
{
"type": "object",
"properties": {
"assigned": {
"description": "true = only the user's assigned, active forms (only has an effect for users who can manage forms).",
"type": "boolean"
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_get_form(form_id, format)
One form definition, including its screens and entries (field ids and labels). Use format 'flat' for the simplest list of fields (what you need to read submissions or create a dispatch), 'nested' (default) for the full structure, 'metadata' or 'minimal' for less.
입력 스키마
{
"type": "object",
"properties": {
"form_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The form id (from gocanvas_list_forms)."
},
"format": {
"description": "Definition format (default nested).",
"type": "string",
"enum": [
"nested",
"flat",
"minimal",
"metadata"
]
}
},
"required": [
"form_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_form_reports(form_id, page)
The report (PDF) definitions attached to a form: id, name, format, whether emailed by default. Paged.
입력 스키마
{
"type": "object",
"properties": {
"form_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The form id."
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"required": [
"form_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_submissions(form_id, user_id, user_email, department_id, status, ...)
Completed forms (submissions): id, form, number, created time, department, user, status. At least one of form_id, user_id or user_email is required (user_id and user_email cannot be combined). Default status is completed. Dates filter created_at. Paged, 100 per page. Use gocanvas_get_submission for the answers.
입력 스키마
{
"type": "object",
"properties": {
"form_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Form id; matches every version of the form."
},
"user_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The user who created the submission."
},
"user_email": {
"description": "Email (login) of the user who created the submission; not with user_id.",
"type": "string",
"minLength": 3,
"maxLength": 254
},
"department_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Department id (default: the user's default department)."
},
"status": {
"description": "Status filter (default completed). handed-off needs hand_off; custom needs custom_status.",
"type": "string",
"enum": [
"all",
"completed",
"deleted",
"in-progress",
"overdue",
"rejected",
"handed-off",
"assigned",
"unassigned",
"custom",
"saved-to-cloud",
"unfinished"
]
},
"hand_off": {
"description": "Workflow handoff state name; required for status handed-off.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"custom_status": {
"description": "Custom status label; required for status custom.",
"type": "string",
"minLength": 1,
"maxLength": 200
},
"start_date": {
"description": "Created at or after (ISO-8601).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"end_date": {
"description": "Created at or before (ISO-8601).",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_get_submission(submission_id)
One submission with all its responses (entry id, label, type, value). Accepts the numeric submission id or the client GUID.
입력 스키마
{
"type": "object",
"properties": {
"submission_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "Numeric submission id (e.g. 691911) or client GUID (e.g. 02ED5FB2-9C61-4F18-AB17-543547DF899B)."
}
},
"required": [
"submission_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_submission_revisions(submission_id, page)
The revision history of a submission (who changed it and when). Paged.
입력 스키마
{
"type": "object",
"properties": {
"submission_id": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "Numeric submission id or client GUID."
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"required": [
"submission_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_users(enabled, page)
Users of the company: id, name, email, enabled. Paged, 100 per page.
입력 스키마
{
"type": "object",
"properties": {
"enabled": {
"description": "true = only enabled users, false = only disabled (default: both).",
"type": "boolean"
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_get_user(user_id)
One user by id: name, login, contact data, default department and role.
입력 스키마
{
"type": "object",
"properties": {
"user_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The user id (from gocanvas_list_users)."
}
},
"required": [
"user_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_departments
Departments of the company: id, name, description. The pseudo department -1 'All' is included.
입력 스키마
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_department_users(department_id)
The users in one department with their department role.
입력 스키마
{
"type": "object",
"properties": {
"department_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The department id (from gocanvas_list_departments)."
}
},
"required": [
"department_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_dispatches(user_id, department_id, form_id, project_id, status, ...)
Dispatches (jobs sent to field workers): id, form, assignee, status, schedule. At least one of user_id, department_id or form_id is required. Dates are ISO-8601. Paged.
입력 스키마
{
"type": "object",
"properties": {
"user_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The user the dispatch is assigned to."
},
"department_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The department."
},
"form_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The form."
},
"project_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Only dispatches assigned to this project."
},
"status": {
"description": "unassigned, assigned, received or ready (ready ignores the date filters and is scoped to the connected user).",
"type": "string",
"enum": [
"unassigned",
"assigned",
"received",
"ready"
]
},
"start_date": {
"description": "Created at or after.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"end_date": {
"description": "Created at or before.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"scheduled_start_date": {
"description": "Scheduled at or after.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"scheduled_end_date": {
"description": "Scheduled end at or before.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:\\d{2})?)?$"
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_get_dispatch(dispatch_id)
One dispatch by id with its pre-filled responses, schedule and status.
입력 스키마
{
"type": "object",
"properties": {
"dispatch_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The dispatch id (from gocanvas_list_dispatches)."
}
},
"required": [
"dispatch_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_customers(page)
Customers (contacts of the Project Management view): individuals or businesses, optionally tied to a site. Paged.
입력 스키마
{
"type": "object",
"properties": {
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_projects(page)
Projects of the Project Management view. Paged.
입력 스키마
{
"type": "object",
"properties": {
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_sites(page)
Sites (job locations) of the Project Management view. Paged.
입력 스키마
{
"type": "object",
"properties": {
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_reference_data(department_id, assigned, page)
Reference data (lookup tables used by forms): id, name, columns, version. Without department_id the user's default department is used.
입력 스키마
{
"type": "object",
"properties": {
"department_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Department id."
},
"assigned": {
"description": "true = only reference data used by forms assigned to the user.",
"type": "boolean"
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_get_reference_data(reference_data_id)
One reference data set with its rows.
입력 스키마
{
"type": "object",
"properties": {
"reference_data_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The reference data id (from gocanvas_list_reference_data)."
}
},
"required": [
"reference_data_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_groups(page)
User groups: id, name, and the forms and users assigned. Paged.
입력 스키마
{
"type": "object",
"properties": {
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_workflows(page)
Workflows (handoff chains between users) the connected user takes part in, with their handoff states and the count of tasks available to claim. Paged.
입력 스키마
{
"type": "object",
"properties": {
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢gocanvas_list_locations(start_date, end_date, user_id, use_created_at, page)
GPS location events of field users (needs the tracker feature). start_date and end_date are required and may span at most 7 days. Omit user_id for all users of the company. Paged.
입력 스키마
{
"type": "object",
"properties": {
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:\\d{2})?)?$",
"description": "Start of the window (ISO-8601; a bare date means 00:00:00)."
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}(:\\d{2})?(Z|[+-]\\d{2}:\\d{2})?)?$",
"description": "End of the window (ISO-8601; a bare date means 23:59:59). At most 7 days after start_date."
},
"user_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Limit to one user."
},
"use_created_at": {
"description": "true = filter by upload time (created_at) instead of recorded_at.",
"type": "boolean"
},
"page": {
"description": "Page number, 1-based (default 1). Use next_page from the previous reply. 100 results per page.",
"type": "integer",
"minimum": 1,
"maximum": 100000
}
},
"required": [
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟡gocanvas_create_dispatch(form_id, dispatch_type, assignee_id, name, description, ...)
WRITE: creates a dispatch, a job that appears on the assignee's mobile device (immediate_dispatch is sent at once, with a push notification when send_notification is true; scheduled_dispatch needs scheduled_at and scheduled_end). Responses pre-fill the assignee's form (entry ids from gocanvas_get_form). Without assignee_id the dispatch stays unassigned. Not idempotent: calling twice creates two dispatches. Media fields cannot be pre-filled.
입력 스키마
{
"type": "object",
"properties": {
"form_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The form to dispatch (from gocanvas_list_forms)."
},
"dispatch_type": {
"type": "string",
"enum": [
"immediate_dispatch",
"scheduled_dispatch"
],
"description": "immediate_dispatch is sent now; scheduled_dispatch at scheduled_at."
},
"assignee_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The user who gets the dispatch (from gocanvas_list_users); omit to leave it unassigned."
},
"name": {
"description": "Short name shown on the dispatch calendar.",
"type": "string",
"minLength": 1,
"maxLength": 255
},
"description": {
"description": "Description shown on the assignee's device.",
"type": "string",
"maxLength": 2000
},
"department_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Department; default is the user's default department."
},
"responses": {
"description": "Pre-filled answers.",
"maxItems": 500,
"type": "array",
"items": {
"type": "object",
"properties": {
"entry_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The form entry id (from gocanvas_get_form)."
},
"value": {
"type": "string",
"maxLength": 5000,
"description": "The value to pre-fill, as text."
},
"multi_key": {
"description": "Only for looped forms: reference to the looped value (one key per loop row).",
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"entry_id",
"value"
]
}
},
"send_notification": {
"description": "Immediate dispatches: send a push notification to the mobile app.",
"type": "boolean"
},
"scheduled_at": {
"description": "Scheduled dispatches: start, in the format MM/DD/YYYY h:mm:ss AM, e.g. 12/1/2024 8:00:00 AM.",
"type": "string",
"minLength": 6,
"maxLength": 40
},
"scheduled_end": {
"description": "Scheduled dispatches: end, same format.",
"type": "string",
"minLength": 6,
"maxLength": 40
},
"reminder_interval": {
"description": "Scheduled dispatches: minutes before the start to send a reminder.",
"type": "integer",
"minimum": 0,
"maximum": 100000
},
"send_calendar_invite": {
"description": "Scheduled dispatches: send a calendar invite.",
"type": "boolean"
}
},
"required": [
"form_id",
"dispatch_type"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}⚪gocanvas_mark_dispatch_received(dispatch_id)
WRITE: acknowledges a dispatch (status becomes received). Only works for a dispatch in the assigned state that is assigned to the connected user; repeating it is refused by GoCanvas.
입력 스키마
{
"type": "object",
"properties": {
"dispatch_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The dispatch id."
}
},
"required": [
"dispatch_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}커뮤니티
증거