{"name":"mcptask.online","version":"16.64","description":"Autonomous AI developers on your own infrastructure – as many as you need. Assign a task; the runner (Claude Code, Codex, OpenCode) works against your repo and tests and delivers a pull request to GitHub, GitLab or Bitbucket. Any model, your data stays with you.","websiteUrl":"https://mcptask.online","serverInfo":{"name":"mcptask.online","version":"16.64"},"transport":{"type":"streamable-http","url":"https://mcptask.online/mcp"},"authentication":{"type":"bearer","required":true,"resourceMetadata":"https://mcptask.online/.well-known/oauth-protected-resource"},"tools":[{"name":"UpdatePieceTool","description":"Update the mutable attributes of an existing Task, Story, Epic or Recurent by relative_id. Only the attributes passed are changed; omitted ones are left alone. Returns before/after for each attribute touched. A dependency on another piece is declared with blocked_by_relative_ids — the updated piece waits for the ids listed there.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"piece_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the piece to update"},"name":{"type":["null","string"],"description":"New name for the piece (omit to leave unchanged)"},"description":{"type":["null","string"],"description":"New description for the piece (omit to leave unchanged)"},"for_errors":{"type":["null","boolean"],"description":"Whether this Epic is the project's bug bucket (Epic only). Omit to leave unchanged. Passing it for another piece type returns a validation error."},"assigned_user_id":{"type":["null","integer"],"description":"Database ID (primary key) of the user to assign. Omit to leave unchanged; pass 0 (or null) to explicitly unassign."},"priority_code":{"type":["null","string"],"description":"Priority code. Omit to leave unchanged."},"scrum_point_code":{"type":["null","string"],"description":"Scrum point/complexity code (Task/Recurent: !, S, M, L, XL, XXL, XXXL; Story: m!, mS, mM, mL, mXL, mXXL, mXXXL). Omit to leave unchanged."},"sprint_id":{"type":["null","integer"],"description":"Database ID (primary key) of the sprint to assign (not relative_id). Omit to leave unchanged."},"task_type_code":{"type":["null","string"],"description":"Task type code (Task only). Omit to leave unchanged."},"repeat_after":{"type":["null","string"],"enum":["1week","2weeks","1month"],"description":"Repeat a Task every 1week, 2weeks or 1month; only a Task inside an Epic or a Recurent repeats; needs repeat_on. Omit to leave unchanged; pass null (with repeat_on null or omitted) to end the repetition."},"repeat_on":{"type":["null","string"],"description":"One value: monday–friday for 1week/2weeks, a day of the month \"1\"–\"31\" for 1month. Omit to leave unchanged."},"parent_relative_id":{"type":["null","integer"],"description":"Relative ID of a parent piece in the same project. Omit to leave unchanged; pass 0 (or null) to move the piece to the project root."},"blocked_by_relative_ids":{"type":"array","items":{"type":"integer"},"description":"Relative IDs of the pieces this piece waits for (its blocked_by links). Additive: it only adds links — remove them with ManageBlockerLinksTool(action: \"remove\"); an id already linked is refused, do not re-send it. All-or-nothing: one id that does not resolve in the account rejects the whole call and creates nothing."}},"required":["account_code","piece_relative_id"]}},{"name":"SendOutreachEmailTool","description":"Send a personalized outreach email (plain text preferred) from your own address through the outreach pipeline. Rate limited to 3/day, refuses suppressed and already-contacted (dedupe_key) recipients.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code you belong to (e.g., \"jchsoft\"). Used to authorize you; the mail is sent from your own contact email."},"to":{"type":"string","minLength":1,"description":"Recipient email address"},"subject":{"type":"string","minLength":1,"description":"Email subject"},"body_text":{"type":"string","minLength":1,"description":"Plain-text body — preferred, keeps it personal. No footer/logo/tracking is added."},"to_name":{"type":["null","string"],"description":"Recipient display name, e.g. \"Jan Novák\""},"body_html":{"type":["null","string"],"description":"Optional HTML body. Omit to send plain text only."},"dedupe_key":{"type":["null","string"],"description":"Idempotency key, e.g. the company domain \"firma.cz\" — a second send with the same key is refused as duplicate."}},"required":["account_code","to","subject","body_text"]}},{"name":"SearchPiecesTool","description":"Search pieces of ONE project by type, state (\"open\" = not completed/approved), assignee, author, text; compact rows + counts_by_state. include_estimates adds scrum_point_code, duration_best_hours, duration_worst_hours, worked_out (hours; day 7 h, week 5 days) to Task/Recurent rows.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"project_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the project to search in (required, there is no account-wide search)"},"parent_relative_id":{"type":["null","integer"],"description":"Only descendants (whole subtree) of this Epic/Story of the same project"},"piece_types":{"type":["null","array"],"items":{"type":"string"},"description":"Task, Story, Epic, Recurent"},"task_type_codes":{"type":["null","array"],"items":{"type":"string"},"description":"e.g. [\"bug\",\"task\"]"},"states":{"type":["null","array"],"items":{"type":"string"},"description":"task_state codes (new, inprogress, completed, approved, blocked, ...) or \"open\" = everything except completed and approved"},"assigned_user_id":{"type":["null","integer"],"description":"User id of the assignee; 0 = unassigned"},"author_user_id":{"type":["null","integer"],"description":"User id of the author"},"query":{"type":["null","string"],"description":"Text match on name and description, same as the web search"},"updated_since":{"type":["null","string"],"description":"ISO 8601"},"created_since":{"type":["null","string"],"description":"ISO 8601"},"sort":{"type":["null","string"],"description":"updated_at_desc (default), created_at_desc or priority"},"page":{"type":["null","integer"],"description":"Page number (1-based), defaults to 1"},"size":{"type":["null","integer"],"description":"Page size (1-50), defaults to 20"},"include_description":{"type":["null","boolean"],"description":"Include descriptions, defaults to false"},"include_estimates":{"type":["null","boolean"],"description":"Task and Recurent rows also carry scrum_point_code, duration_best_hours, duration_worst_hours, worked_out (hours), defaults to false"}},"required":["account_code","project_relative_id"]}},{"name":"ManageBlockerLinksTool","description":"Add or remove blocked_by links on a piece. Batch operation: one bad id rejects the whole call.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"piece_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the waiting piece whose blocker links change"},"action":{"type":"string","minLength":1,"enum":["add","remove"],"description":"Action to perform: \"add\" or \"remove\""},"blocker_relative_ids":{"type":"array","items":{"type":"integer"},"description":"Relative IDs of the blocker pieces. For \"add\", every id must resolve in the account and must not be linked already; any bad or already-linked id rejects the whole call. For \"remove\", unknown ids are reported as not_found but the rest are still detached."}},"required":["account_code","piece_relative_id","action","blocker_relative_ids"]}},{"name":"LogWorkProgressTool","description":"Log work progress performed by the agent with automatic task state management","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"task_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the task to update"},"description":{"type":"string","minLength":1,"description":"Description of work performed"},"progress_percent":{"type":"integer","not":{"type":"null"},"description":"New progress percentage (0-100)"},"duration_minutes":{"type":"integer","not":{"type":"null"},"description":"Duration of work in minutes"}},"required":["account_code","task_relative_id","description","progress_percent"]}},{"name":"ListTimeSheetReportOptionsTool","description":"Lists available filters for the timesheet report: date range, companies, projects, workers and report layout options. Values are scoped to the authenticated user's role.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"from":{"type":["null","string"],"description":"Start date in ISO format (YYYY-MM-DD); defaults to the beginning of the current week"},"to":{"type":["null","string"],"description":"End date in ISO format (YYYY-MM-DD); defaults to today"}},"required":["account_code"]}},{"name":"ListProjectsTool","description":"List the current user's projects under an account.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"}},"required":["account_code"]}},{"name":"ListPiecesTool","description":"Paginated list of the doable pieces (Tasks, Stories, Recurents) of the projects you may see in an account. Page size 1-50, default 10.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"page":{"type":["null","integer"],"description":"Page number (1-based), defaults to 1"},"size":{"type":["null","integer"],"description":"Page size (1-50), defaults to 10"}},"required":["account_code"]}},{"name":"GetWorkloadTool","description":"Open assigned work per user, account-wide or for one project or user: status (busy = something in progress or waiting; idle = only blocked or nothing), counts {inprogress, waiting, blocked, open}, hours {best, worst, worked_out} (day 7 h), in-progress pieces and a per-project split; project members with no open work are listed as idle. Counts Tasks and assigned Stories.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"project_relative_id":{"type":["null","integer"],"description":"Only this project; every readable project of the account when omitted"},"user_id":{"type":["null","integer"],"description":"Only this assignee (user id)"},"include_pieces":{"type":["null","boolean"],"description":"Add each user's open pieces as compact rows, defaults to false"}},"required":["account_code"]}},{"name":"GetVisitStatisticsTool","description":"mcptask.online site traffic, the same numbers as the visit statistics page: one section per call (overview, pages, daily, weekdays, funnel, registrations, referrers, blog_articles), start with the overview. The optional page argument narrows the daily section to one page. Only for owners of the WorkVector company.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code; only \"jchsoft\" has visit statistics"},"range":{"type":["null","string"],"description":"Period: one of week, four_weeks, four_months, this_month, last_month; defaults to week"},"section":{"type":["null","string"],"description":"Part of the statistics: one of overview, pages, daily, weekdays, funnel, registrations, referrers, blog_articles; defaults to overview"},"page":{"type":["null","string"],"description":"Only for section daily: narrow the series to one page, one of hp, features, about, pricing, autonomous_agents, contact, integrations, integrations_developers, media, installation, onboarding, how_it_works, api_docs, terms, privacy, cookies_policy, press_kit, runner, runner_docs, live, security, ai_coding_agent_orchestrators, vibe_kanban_alternative, devin_alternative, jira_alternative, build_your_own_ai_developer, ai_developer_comparison, linear_alternative, copilot_alternative, openhands_alternative, cursor_background_agents_alternative, coder_agents_alternative, blog, blog_article"}},"required":["account_code"]}},{"name":"GetUsageGuideTool","description":"The McpTask.online usage guide (how to use this MCP server) as markdown.","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"GetProjectTreeTool","description":"Hierarchical tree of a project (Root -\u003e Epic -\u003e Story terminal). Compact nodes: id, kind, type, children_count, shortened name.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"project_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the project"}},"required":["account_code","project_relative_id"]}},{"name":"GetProjectTool","description":"Extended project information by relative ID: options, users with roles, task summary, and totals: estimate_hours {best, worst} and worked_hours {tasks, bugs, recurents, total} in hours, tasks_by_scrum_point (non-bug Tasks). Estimates sum the stored Duration values (the ones the web UI shows; a day is as long as the Duration record says, 7 hours in the standard set); estimate_price is those hours x the current hour_price (with as_of, the hour_price of that day). Pass as_of (YYYY-MM-DD) for the totals as they stood at the end of that day, e.g. to compare the range quoted on an offer date with the final cost: they are recorded once a day, totals_as_of says which day answered, and a date before the first record returns totals null with a note. Prices and contact emails only if you may edit the project.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"project_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the project"},"as_of":{"type":"string","minLength":1,"description":"Date (YYYY-MM-DD, today or earlier): return the totals recorded on that day instead of the current ones"}},"required":["account_code","project_relative_id"]}},{"name":"GetPieceTool","description":"Read details of one piece (Task/Story/Epic/Recurent) by relative ID: subtasks, messages, attachments. Estimates: localized text (duration_best, duration_worst) plus numbers in hours (duration_best_hours, duration_worst_hours, worked_out); a day is 7 hours, a week 5 days.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"piece_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the piece to read"}},"required":["account_code","piece_relative_id"]}},{"name":"GetPieceEffortsTool","description":"Effort (time tracking) history for a piece by its relative ID (most recent 50 entries).","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"piece_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the piece"}},"required":["account_code","piece_relative_id"]}},{"name":"GetNextTaskTool","description":"Get the next task or story to work on (highest priority, errors first, oldest within priority). Optionally filter by project, and skip given pieces for one call with exclude_relative_ids.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"project_relative_id":{"type":["null","integer"],"description":"Optional relative ID of a project to filter by"},"exclude_relative_ids":{"type":["null","array"],"description":"Relative IDs of pieces to skip on this call (e.g. pieces you are currently stuck on). Per-call only — does not change the piece state."}},"required":["account_code"]}},{"name":"GetNextStorySubtaskTool","description":"Get the next subtask to work on inside one Story, (highest priority, errors first, oldest within priority, blocked subtasks skipped). Subtasks listed in exclude_relative_ids are skipped for one call.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"story_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the Story whose next subtask you want"},"exclude_relative_ids":{"type":["null","array"],"description":"Relative IDs of subtasks to skip on this call (e.g. subtasks you are currently stuck on). Per-call only — does not change the piece state."}},"required":["account_code","story_relative_id"]}},{"name":"GetCurrentUserTool","description":"Current authenticated user: profile, accessible account codes, today's working hours (hour_goal, work_start, worked_out), and respect_working_hours flag (set per Company role).","inputSchema":{"type":"object","properties":{},"required":[]}},{"name":"GetAttachmentTool","description":"Attachment metadata and a signed download URL, valid for 15 minutes, for a piece attachment (avoids inlining binary content).","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"piece_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the piece the attachment belongs to"},"attachment_id":{"type":"integer","not":{"type":"null"},"description":"Database ID (primary key) of the attachment (not relative_id)"}},"required":["account_code","piece_relative_id","attachment_id"]}},{"name":"GetAccountTool","description":"Account workspace details by account code: attributes, account-level users, permitted projects, and permitted companies. Billing data only if you may update the account; contact emails only if you run it.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"}},"required":["account_code"]}},{"name":"ExportTimeSheetReportTool","description":"Exports a timesheet report in JSON, CSV or PDF. Filters (companies, projects, workers, date range) are scoped to the authenticated user's role.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"from":{"type":"string","minLength":1,"description":"Start date in ISO format (YYYY-MM-DD)"},"to":{"type":"string","minLength":1,"description":"End date in ISO format (YYYY-MM-DD)"},"company_id":{"type":["null","integer"],"description":"Company database ID; omit to include all allowed companies"},"project_id":{"type":["null","integer"],"description":"Project database ID; omit to include all allowed projects"},"type":{"type":["null","string"],"enum":["nested","by_day","summary"],"description":"Report layout: nested, by_day or summary"},"format":{"type":["null","string"],"enum":["json","csv","pdf"],"description":"Export format: json, csv or pdf"}},"required":["account_code","from","to"]}},{"name":"CreateUploadUrlTool","description":"Returns a short-lived URL for uploading a file directly to storage and a signed blob id for attaching it to a piece or to a message on it.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"piece_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the piece the file will be attached to"},"file_name":{"type":"string","minLength":1,"description":"Filename with extension (e.g., \"screenshot.png\")"},"byte_size":{"type":"integer","not":{"type":"null"},"description":"Exact file size in bytes"},"checksum":{"type":"string","minLength":1,"description":"Base64-encoded MD5 digest of the file, as printed by `openssl md5 -binary FILE | base64`"},"content_type":{"type":["null","string"],"description":"MIME type of the file; derived from the file extension when omitted"}},"required":["account_code","piece_relative_id","file_name","byte_size","checksum"]}},{"name":"CreateProjectTool","description":"Create a project in an account, as the web \"new project\" form does. Ask the user for every value this tool returns under needs_input and never invent one, least of all a price or a currency: call with only account_code to get the questions and their allowed values, then call again with the answers. When an active project of the same name already exists, nothing is created and that project is returned (duplicate: true).","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"name":{"type":["null","string"],"description":"Project name. Ask the user."},"description":{"type":["null","string"],"description":"What the project is about. Ask the user."},"project_type_code":{"type":["null","string"],"description":"Project type code, from allowed_values under needs_input. Ask the user."},"currency_code":{"type":["null","string"],"description":"Currency code, from allowed_values under needs_input. Ask the user."},"company_relative_id":{"type":["null","integer"],"description":"Relative ID of the company the project is for. Needed only when the account has more than one company."},"sprint_points":{"type":["null","integer"],"description":"Optional number of points allowed in a sprint. Empty by default."},"start_at":{"type":["null","string"],"description":"Optional start, ISO 8601. Default now."},"is_template":{"type":["null","boolean"],"description":"Optional: true makes the project a template. Default false."}},"required":["account_code"]}},{"name":"CreatePieceTool","description":"Create new work items (Tasks, Stories, Epics, Recurents) in McpTask.online with full authorization controls. A dependency on another piece is declared with blocked_by_relative_ids — the new piece waits for the ids listed there. blocks_relative_ids is the opposite direction — the listed pieces wait for the new piece; the assignee of a piece may list it there when the new piece is assigned to another user (a hand-off), so finishing the new piece unblocks theirs.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"piece_type":{"type":"string","minLength":1,"enum":["Task","Story","Epic","Recurent"],"description":"Type of piece to create: Task, Story, Epic, or Recurent"},"name":{"type":"string","minLength":1,"description":"Name/title of the piece"},"description":{"type":["null","string"],"description":"Optional description of the piece"},"project_relative_id":{"type":"integer","not":{"type":"null"},"description":"Account-scoped relative ID of the target project (not the database ID)"},"parent_relative_id":{"type":["null","integer"],"description":"Relative ID of a parent piece in the same project. Omit to attach to the project root. Story/Recurent/Epic parent must be an Epic; Task may parent an Epic, Story, Recurent, or Task"},"blocked_by_relative_ids":{"type":"array","items":{"type":"integer"},"description":"Relative IDs of the pieces this piece waits for (its blocked_by links). Additive: it only adds links — remove them with ManageBlockerLinksTool(action: \"remove\"); an id already linked is refused, do not re-send it. All-or-nothing: one id that does not resolve in the account rejects the whole call and creates nothing."},"blocks_relative_ids":{"type":"array","items":{"type":"integer"},"description":"Relative IDs of the pieces that will wait for this new piece (each gets a blocked_by link to it) — the opposite direction of blocked_by_relative_ids. Allowed for a waiting piece you authored or whose project you are a boss of, and for a piece assigned to you when this new piece is assigned to another user (a hand-off: your task waits until they finish theirs). All-or-nothing: one refused or unresolvable id rejects the whole call and creates nothing."},"task_type_code":{"type":["null","string"],"description":"Task type code (for Tasks only)"},"assigned_user_id":{"type":["null","integer"],"description":"Database ID (primary key) of the user to assign the piece to. Must belong to the same account; unknown IDs return an error rather than silently producing an unassigned piece."},"priority_code":{"type":["null","string"],"description":"Priority code"},"scrum_point_code":{"type":["null","string"],"description":"Scrum point/complexity code. Task/Recurent: ! (0), S (3), M (5), L (8), XL (13), XXL (40), XXXL (100). Story: m! (0), mS (42), mM (70), mL (112), mXL (182), mXXL (560), mXXXL (1400)"},"sprint_id":{"type":["null","integer"],"description":"Database ID (primary key) of the sprint to assign the piece to (not relative_id)"},"repeat_after":{"type":["null","string"],"enum":["1week","2weeks","1month"],"description":"Repeat a Task every 1week, 2weeks or 1month; only a Task inside an Epic or a Recurent repeats; needs repeat_on."},"repeat_on":{"type":["null","string"],"description":"One value: monday–friday for 1week/2weeks, a day of the month \"1\"–\"31\" for 1month."},"for_errors":{"type":["null","boolean"],"description":"Whether this Epic is the project's bug bucket (Epic only). Passing it for another piece type returns a validation error."}},"required":["account_code","piece_type","name","project_relative_id"]}},{"name":"CreateAttachmentLinkTool","description":"Returns a link the user opens to attach files (screenshots, photos, PDFs) to a piece themselves, without signing in. Use this when the user wants a file attached that you only see in the chat (a pasted screenshot or photo): you cannot upload it yourself. Give the user the returned link; they open it and pick the file. The link works for 30 minutes, only for this piece.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"piece_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the piece the files will be attached to"}},"required":["account_code","piece_relative_id"]}},{"name":"BlockTaskTool","description":"Block or unblock a task that cannot be completed temporarily","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"task_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the task to block or unblock"},"action":{"type":"string","minLength":1,"enum":["block","unblock"],"description":"Action to perform: \"block\" or \"unblock\""},"reason":{"type":["null","string"],"description":"Optional reason for blocking or unblocking the task"}},"required":["account_code","task_relative_id","action"]}},{"name":"AddProjectMemberTool","description":"Add an existing member of the account to a project with a project role. Ask the user who to add and with which role, and never guess either: call without user_id or role_name to get the people who can be added and the roles each may take (needs_input), then call again with both.","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"project_relative_id":{"type":"integer","not":{"type":"null"},"description":"Account-scoped relative ID of the project (not the database ID)"},"user_id":{"type":["null","integer"],"description":"Database ID (primary key) of the user to add, from the needs_input list. Must be an active member of the account."},"role_name":{"type":["null","string"],"enum":["boss","worker","developer","designer","tester","brigadier","client"],"description":"Project role: boss, worker, developer, designer, tester, brigadier, client. Purple roles (boss, worker, developer, designer) are for active members of the primary company only."}},"required":["account_code","project_relative_id"]}},{"name":"AddMessageTool","description":"Add a note/message to a task with optional file attachment","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"task_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the task to add message to"},"content":{"type":"string","minLength":1,"description":"Message content (supports markdown)"},"file_url":{"type":["null","string"],"description":"Public https URL of the file to attach; the server downloads it"},"file_content":{"type":["null","string"],"description":"Base64-encoded file content (use this for remote MCP clients)"},"file_name":{"type":["null","string"],"description":"Filename with extension (required when using file_content, e.g., \"screenshot.png\")"},"signed_blob_id":{"type":["null","string"],"description":"Signed blob id of a file already uploaded to a direct-upload URL"}},"required":["account_code","task_relative_id","content"]}},{"name":"AddAttachmentTool","description":"Upload a file attachment directly to an existing task/story/piece","inputSchema":{"type":"object","properties":{"account_code":{"type":"string","minLength":1,"description":"Account code (e.g., \"bcp\", \"jchsoft\")"},"piece_relative_id":{"type":"integer","not":{"type":"null"},"description":"Relative ID of the piece to attach file to"},"file_url":{"type":["null","string"],"description":"Public https URL of the file to attach; the server downloads it"},"file_content":{"type":["null","string"],"description":"Base64-encoded file content (use this for remote MCP clients)"},"file_name":{"type":["null","string"],"description":"Filename with extension (required when using file_content, e.g., \"report.pdf\")"},"signed_blob_id":{"type":["null","string"],"description":"Signed blob id of a file already uploaded to a direct-upload URL"}},"required":["account_code","piece_relative_id"]}}],"resources":[{"uri":"mcptask://user","name":"User","description":"Current authenticated user information, accessible accounts, working hours (hour_goal, work_start, worked_out), and respect_working_hours flag (per Company role, see #11687)","mimeType":"application/json"},{"uri":"mcptask://resource-templates","name":"Resource Templates","description":"List of available templated MCP resources, for MCP clients that do not implement resources/templates/list","mimeType":"application/json"},{"uriTemplate":"mcptask://projects/{account_code}","name":"Projects","description":"List of projects for the current user under the specified account","mimeType":"application/json"},{"uriTemplate":"mcptask://projects/{account_code}/{project_id}/tree","name":"ProjectTree","description":"Hierarchical tree of project pieces (Root → Epic → Story terminal). Compact nodes: id, kind, type, children_count, shortened name.","mimeType":"application/json"},{"uriTemplate":"mcptask://projects/{account_code}/{project_id}","name":"ProjectDetails","description":"Extended project information including options, users with roles and IDs, task summary and totals (estimate range, worked hours, task sizes). Prices and contact emails only if you may edit the project.","mimeType":"application/json"},{"uriTemplate":"mcptask://pieces/{account_code}{?page,size}","name":"Pieces","description":"Paginated list of the doable pieces (Tasks, Stories, Recurents) of the projects you may see. Use size parameter to control page size (start with: 10, try size=5 for large pieces)","mimeType":"application/json"},{"uriTemplate":"mcptask://pieces/{account_code}/{piece_id}/efforts","name":"PieceEfforts","description":"Read-only access to effort history for a specific piece","mimeType":"application/json"},{"uriTemplate":"mcptask://pieces/{account_code}/{piece_id}","name":"PieceDetails","description":"Read-only access to comprehensive piece information from WorkVector","mimeType":"application/json"},{"uriTemplate":"mcptask://pieces/{account_code}/{piece_id}/attachments/{attachment_id}","name":"PieceAttachment","description":"Get attachment metadata with a short-lived signed download URL (avoids PostgreSQL NOTIFY size limits)"},{"uriTemplate":"mcptask://pieces/{account_code}/@next{?project_relative_id,exclude_relative_ids}","name":"NextTask","description":"Get the next task or story to work on. Optionally filter by project_relative_id and/or skip pieces you are currently stuck on via exclude_relative_ids. (highest priority, errors first, oldest within priority)","mimeType":"application/json"},{"uriTemplate":"mcptask://pieces/{account_code}/{story_relative_id}/@next{?exclude_relative_ids}","name":"NextStorySubtask","description":"Get the next subtask to work on inside one Story, with the same rules as @next (highest priority, errors first, oldest within priority, blocked subtasks skipped). Inside a Story call this instead of scanning its subtasks yourself.","mimeType":"application/json"},{"uri":"mcptask://how_to_use","name":"How to use McpTask.online MCP","description":"Instructions on how to work with McpTask.online MCP resources and integrate with Claude Code, Codex CLI, OpenCode or any MCP client","mimeType":"text/markdown"},{"uriTemplate":"mcptask://account/{account_code}","name":"Account","description":"Account workspace details: attributes, account-level users, permitted projects, and permitted companies. Billing data only if you may update the account; contact emails only if you run it.","mimeType":"application/json"}]}