MCP 2025-06-18
projects_execute
Execute a Projects operation with its typed payload. Account and credential scope come from the current key. list, get, collectionContext, tasksPage, taskGet and comments read in one call. Every write needs expectedVersion where it has one, and receipt: { operation, key, issuedAt, requestHash }, where operation names the write (tasks.create, tasks.update, tasks.move, comments.create), key is unique, issuedAt is now in milliseconds and requestHash is the SHA-256 hex of the payload without receipt, serialized as compact JSON with object keys sorted by localeCompare and undefined values left out. taskMove takes each column's generation from collectionContext.orders. tasksPage filters is a JSON string such as { statusId, assignee: { kind: 'unassigned' } }.
Scopes
Reads need read:projects. Writes also need write:projects; creating and managing projects, statuses and settings also need manage:projects.
- read:projects
Input schema
This schema is shared with tools/list, including the required fields and additionalProperties rules.
{
"type": "object",
"properties": {
"operation": {
"enum": [
"admitRead",
"renewRead",
"releaseRead",
"list",
"get",
"collectionContext",
"tasksPage",
"taskGet",
"sprintsList",
"create",
"update",
"setLegacyDefault",
"taskCreate",
"taskUpdate",
"taskMove",
"sprintCreate",
"sprintUpdate",
"statusCreate",
"statusUpdate",
"statusesReorder",
"tagCreate",
"tagUpdate",
"tagMerge",
"commentCreate",
"sprintStart",
"sprintRetry",
"sprintCancel",
"sprintComplete",
"metrics",
"overview",
"dashboard",
"burndown",
"sprintRolloverTask",
"rebalance",
"comments"
]
},
"payload": {
"type": "object",
"description": "Operation payload from the Projects API contract; omit account/service/authorization selectors."
}
},
"required": [
"operation",
"payload"
],
"additionalProperties": false
}Call this tool
Send it as POST https://www.specifywork.com/api/mcp. Authorization: Bearer <agent key>, a key that starts with sw_agent. Replace the example values with records your key can reach.
{
"jsonrpc": "2.0",
"id": "example_projects_execute",
"method": "tools/call",
"params": {
"name": "projects_execute",
"arguments": {
"operation": "admitRead",
"payload": {}
}
}
}Read the result before continuing
The selected Projects operation's result.
A call returns content[0].text with the JSON result and structuredContent.result with the same value. A refused call returns isError: true and the error code in content[0].text.
A request being accepted is not proof of an external action completing. Keep correlation IDs and mutation idempotency keys unchanged across safe retries.