Tookan MCP by usefulapi
Read Tookan tasks, agents, teams and customers; create delivery tasks and assign agents.
我该使用它吗
质量与安全性
发现(1)
- LOW在 get_agent 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"tookan": {
"url": "https://tookan.usefulapi.io/mcp"
}
}
}远程端点
https://tookan.usefulapi.io/mcpstreamable-http它能做什么
工具清单
工具(15)
🟢get_account
The connected Tookan account (admin user): user_id, email, name, company name and address. Good first call. POST /v2/get_user_details.
输入模式
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_tasks(job_type, start_date, end_date, job_status, fleet_id, ...)
List tasks (Tookan calls them jobs) of one task type within a date range of the task date (at most 31 days, within the last 31 days). Paginated: one Tookan page per call (page, default 1). Filter by status, agent (fleet_id), team, customer, job ids or your order ids. Task status codes: 0 assigned, 1 started, 2 successful, 3 failed, 4 in progress/arrived, 6 unassigned, 7 accepted/acknowledged, 8 declined, 9 cancelled, 10 deleted. POST /v2/get_all_tasks.
输入模式
{
"type": "object",
"properties": {
"job_type": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
}
],
"description": "Task type: 0 = pickup, 1 = delivery, 2 = appointment, 3 = field workforce (FOS)."
},
"start_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start of the task-date range, YYYY-MM-DD."
},
"end_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End of the task-date range, YYYY-MM-DD (at most 31 days after start_date)."
},
"job_status": {
"description": "Only tasks in this status. Task status codes: 0 assigned, 1 started, 2 successful, 3 failed, 4 in progress/arrived, 6 unassigned, 7 accepted/acknowledged, 8 declined, 9 cancelled, 10 deleted.",
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
},
{
"type": "number",
"const": 4
},
{
"type": "number",
"const": 6
},
{
"type": "number",
"const": 7
},
{
"type": "number",
"const": 8
},
{
"type": "number",
"const": 9
},
{
"type": "number",
"const": 10
}
]
},
"fleet_id": {
"description": "Only tasks of this agent (from list_agents).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"team_id": {
"description": "Only tasks of this team (from list_teams).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"customer_id": {
"description": "Only tasks of this customer (from list_customers).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"job_ids": {
"description": "Only these task (job) ids.",
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"order_ids": {
"description": "Only tasks with these order ids (your own reference).",
"maxItems": 100,
"type": "array",
"items": {
"type": "string"
}
},
"custom_fields": {
"description": "Include the tasks' custom-field data.",
"type": "boolean"
},
"page": {
"default": 1,
"description": "Page number (default 1). Tookan pages are a fixed size.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
}
},
"required": [
"job_type",
"start_date",
"end_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_tasks(job_ids, include_task_history, include_additional_info)
Full details of up to 100 tasks by job id: customer, addresses, agent (fleet_id/fleet_name), status, timestamps (started/arrived/completed), tracking link, custom fields; optionally the status history. Task status codes: 0 assigned, 1 started, 2 successful, 3 failed, 4 in progress/arrived, 6 unassigned, 7 accepted/acknowledged, 8 declined, 9 cancelled, 10 deleted. POST /v2/get_job_details.
输入模式
{
"type": "object",
"properties": {
"job_ids": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"description": "Task (job) ids, e.g. [5145]."
},
"include_task_history": {
"description": "Include each task's status history.",
"type": "boolean"
},
"include_additional_info": {
"description": "Include the job's additional info.",
"type": "boolean"
}
},
"required": [
"job_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_tasks_by_order_id(order_ids, include_task_history)
Full details of the tasks carrying the given order ids (the reference you set when creating a task). POST /v2/get_job_details_by_order_id.
输入模式
{
"type": "object",
"properties": {
"order_ids": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"description": "Order ids, e.g. [\"P000469\"]."
},
"include_task_history": {
"description": "Include each task's status history.",
"type": "boolean"
}
},
"required": [
"order_ids"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_task_stats(job_status, job_type, start_date, end_date, team_id)
Task counts per status (e.g. successful vs failed), optionally for one task type, one team and a date range. Task status codes: 0 assigned, 1 started, 2 successful, 3 failed, 4 in progress/arrived, 6 unassigned, 7 accepted/acknowledged, 8 declined, 9 cancelled, 10 deleted. POST /v2/user_task_stats.
输入模式
{
"type": "object",
"properties": {
"job_status": {
"description": "Only these statuses, e.g. [2, 3].",
"type": "array",
"items": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
},
{
"type": "number",
"const": 4
},
{
"type": "number",
"const": 6
},
{
"type": "number",
"const": 7
},
{
"type": "number",
"const": 8
},
{
"type": "number",
"const": 9
},
{
"type": "number",
"const": 10
}
]
}
},
"job_type": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
}
],
"description": "Task type: 0 = pickup, 1 = delivery, 2 = appointment, 3 = field workforce (FOS)."
},
"start_date": {
"description": "Start date, YYYY-MM-DD.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"end_date": {
"description": "End date, YYYY-MM-DD.",
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"team_id": {
"description": "Only tasks of this team.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_agents(name, tags, match_any_tag, status, fleet_type, ...)
List agents (drivers / field workers; Tookan calls them fleets) with fleet_id, name, phone, tags, team and live status (0 available, 1 offline, 2 busy). Filter by name, tags, availability or fleet ids. The API returns the whole list; this tool returns a window (limit/offset, next_offset). POST /v2/get_all_fleets.
输入模式
{
"type": "object",
"properties": {
"name": {
"description": "Only agents whose name matches this text.",
"type": "string"
},
"tags": {
"description": "Comma-separated agent tags, e.g. \"mini,suv\".",
"type": "string"
},
"match_any_tag": {
"description": "With tags: true = agents having ANY of the tags, false = ALL of them.",
"type": "boolean"
},
"status": {
"description": "0 = only free agents, 1 = only busy agents.",
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
}
]
},
"fleet_type": {
"description": "1 = captive agents, 2 = freelancers.",
"anyOf": [
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
}
]
},
"fleet_ids": {
"description": "Only these agent ids.",
"type": "array",
"items": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"include_team_id": {
"description": "Include each agent's team id.",
"type": "boolean"
},
"limit": {
"default": 50,
"description": "Max items to return (default 50, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"default": 0,
"description": "Items to skip (use next_offset from the previous call).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_agent(fleet_id)
One agent's profile (name, email, phone, tags, transport, location, rating, active state) and current tasks. Only profile fields are returned; app tokens and password hashes never are. POST /v2/view_fleet_profile.
输入模式
{
"type": "object",
"properties": {
"fleet_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Agent id (fleet_id from list_agents)."
}
},
"required": [
"fleet_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_agent_location(fleet_id)
An agent's last known coordinates (latitude/longitude). POST /v2/get_fleet_location.
输入模式
{
"type": "object",
"properties": {
"fleet_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Agent id (fleet_id from list_agents)."
}
},
"required": [
"fleet_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_teams(include_agents, limit, offset)
List teams (team_id, name, address, tags). With include_agents, each team also lists its agents. Returns a window (limit/offset, next_offset). POST /v2/view_all_team_only (or /v2/view_teams with agents).
输入模式
{
"type": "object",
"properties": {
"include_agents": {
"description": "Also return each team's agents (larger reply).",
"type": "boolean"
},
"limit": {
"default": 50,
"description": "Max items to return (default 50, max 200).",
"type": "integer",
"minimum": 1,
"maximum": 200
},
"offset": {
"default": 0,
"description": "Items to skip (use next_offset from the previous call).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢list_customers(name, phone, page)
List customers (customer_id, name, phone, email, address), optionally searched by name or phone. Paginated: one Tookan page per call (page, default 1). POST /v2/get_all_customers.
输入模式
{
"type": "object",
"properties": {
"name": {
"description": "Search by customer name.",
"type": "string"
},
"phone": {
"description": "Search by customer phone number.",
"type": "string"
},
"page": {
"default": 1,
"description": "Page number (default 1). Tookan pages are a fixed size.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 10000
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢find_customer_by_phone(phone)
Find customers by exact phone number. POST /v2/find_customer_with_phone.
输入模式
{
"type": "object",
"properties": {
"phone": {
"type": "string",
"minLength": 3,
"description": "Phone number, e.g. \"9897416008\" or \"+19897416008\"."
}
},
"required": [
"phone"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢get_customer(customer_id)
One customer's profile (contact details, address, coordinates). POST /v2/view_customer_profile.
输入模式
{
"type": "object",
"properties": {
"customer_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Customer id (from list_customers)."
}
},
"required": [
"customer_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴create_delivery_task(customer_address, job_delivery_datetime, timezone, customer_username, customer_phone, ...)
WRITE: create a delivery task (job) for a customer address, due by job_delivery_datetime in the given timezone. Optionally assign it to an agent (fleet_id) or team, or let Tookan auto-assign it within the team. Returns job_id and tracking link. Always uses the address given here, not one saved for the customer's phone (ignore_customer_lat_long 1). POST /v2/create_task (has_pickup 0, has_delivery 1, layout_type 0).
输入模式
{
"type": "object",
"properties": {
"customer_address": {
"type": "string",
"minLength": 1,
"description": "Delivery address."
},
"job_delivery_datetime": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}(:\\d{2})?$",
"description": "Deliver before this local time, YYYY-MM-DD HH:MM:SS."
},
"timezone": {
"type": "integer",
"minimum": -840,
"maximum": 720,
"description": "Minutes to ADD to local time to get UTC (Tookan's convention): IST = -330, CET = -60, EST = 300, PST = 480."
},
"customer_username": {
"description": "Customer name.",
"type": "string"
},
"customer_phone": {
"description": "Customer phone, e.g. \"+12015555555\".",
"type": "string"
},
"customer_email": {
"description": "Customer email.",
"type": "string",
"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,}$"
},
"order_id": {
"description": "Your own reference for the task.",
"type": "string"
},
"job_description": {
"description": "What is to be delivered.",
"type": "string"
},
"latitude": {
"description": "Delivery latitude (else Tookan geocodes the address).",
"type": "string"
},
"longitude": {
"description": "Delivery longitude.",
"type": "string"
},
"team_id": {
"description": "Team to put the task in (from list_teams).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"fleet_id": {
"description": "Agent to assign the task to (from list_agents).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"auto_assignment": {
"description": "Let Tookan auto-assign the task to an agent of team_id.",
"type": "boolean"
},
"tags": {
"description": "Comma-separated agent tags used by auto-assignment.",
"type": "string"
},
"notify": {
"description": "Send the customer/agent notifications.",
"type": "boolean"
}
},
"required": [
"customer_address",
"job_delivery_datetime",
"timezone"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴assign_agent_to_task(job_id, fleet_id, team_id, notify)
WRITE: assign (or reassign) a task to an agent of a team; replaces any previous agent. Notifies the agent unless notify is false (so repeating the call notifies again). POST /v2/assign_fleet_to_task.
输入模式
{
"type": "object",
"properties": {
"job_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Task (job) id."
},
"fleet_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Agent id (from list_agents)."
},
"team_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "The agent's team id (from list_teams)."
},
"notify": {
"description": "Notify the agent (default true).",
"type": "boolean"
}
},
"required": [
"job_id",
"fleet_id",
"team_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴update_task_status(job_id, job_status)
WRITE (DESTRUCTIVE): force a task's status, overriding the agent app. Completing (2 successful, 3 failed) or cancelling (9) closes the task and notifies per the account's settings; confirm with the user first. Deleting (10) is not offered. Settable: 0 assigned, 1 started, 2 successful, 3 failed, 4 arrived, 6 unassigned, 7 accepted, 8 declined, 9 cancelled. POST /v2/update_task_status.
输入模式
{
"type": "object",
"properties": {
"job_id": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991,
"description": "Task (job) id."
},
"job_status": {
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
},
{
"type": "number",
"const": 2
},
{
"type": "number",
"const": 3
},
{
"type": "number",
"const": 4
},
{
"type": "number",
"const": 6
},
{
"type": "number",
"const": 7
},
{
"type": "number",
"const": 8
},
{
"type": "number",
"const": 9
}
],
"description": "New status code (0-4, 6-9; 10 deleted is not allowed)."
}
},
"required": [
"job_id",
"job_status"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}社区
证据