# Teamwork — how to use (mcp.ai)

Connect your Teamwork account and use 12 tools for project management straight from your AI agent. Connect with your own API key. Teamwork is a project management platform for planning projects, coordinating tasks, collaborating with teams, and tracking time.

## Option A — via MCP (recommended)
Remote MCP endpoint (HTTP, streamable): `https://api.mcp.ai/p_teamwork?ms=1787295780000`
Add it as a custom/remote MCP connector in your client (Claude, Cursor, VS Code…), then authenticate when prompted. Once connected, ask the agent to use the server's tools (e.g. `teamwork_create_tag`).

## Option B — via direct REST API
Base URL: `https://api.mcp.ai/api/teamwork`
Auth: `Authorization: Bearer sk_live_…` — create a workspace API key at https://mcp.ai/settings/api-keys
Discover endpoints: `GET https://api.mcp.ai/api/teamwork/_endpoints`

### Endpoints
- `POST https://api.mcp.ai/api/teamwork/create/tag` — Create a Teamwork tag, or return the existing installation tag when the same name already exists.
  - body: { name: string, color?: string, project_id?: integer }
- `POST https://api.mcp.ai/api/teamwork/create/task` — Create a task in a Teamwork task list with common scheduling, assignment, estimate, privacy, and tag fields.
  - body: { name: string, tag_ids?: integer[], due_date?: string, is_private?: boolean, start_date?: string, description?: string, fire_webhook?: boolean, task_list_id: integer, notify_assignees?: boolean, assignee_user_ids?: integer[], estimated_minutes?: integer }
- `POST https://api.mcp.ai/api/teamwork/list/milestones` — List visible Teamwork milestones by project, status, due-date range, assignee, or text. Returns one page and an opaque continuation cursor.
  - body: { statuses?: string[], due_after?: string, page_size?: integer, due_before?: string, next_cursor?: string, project_ids?: integer[], search_term?: string, assigned_user_ids?: integer[], include_completed?: boolean }
- `POST https://api.mcp.ai/api/teamwork/list/people` — List people visible to the connected Teamwork user for assignment and ownership workflows.
  - body: { page_size?: integer, user_type?: string, next_cursor?: string, project_ids?: integer[], search_term?: string, include_clients?: boolean, include_collaborators?: boolean, include_service_accounts?: boolean }
- `POST https://api.mcp.ai/api/teamwork/list/projects` — List projects visible to the connected Teamwork user, with focused filters for name, status, company, membership, and archival state. Returns one page and an opaque continuation cursor.
  - body: { page_size?: integer, company_ids?: integer[], next_cursor?: string, search_term?: string, updated_after?: string, include_archived?: boolean, only_my_projects?: boolean, project_statuses?: string[] }
- `POST https://api.mcp.ai/api/teamwork/list/tags` — List Teamwork tags visible to the connected user, optionally filtered by project, item type, name, or usage. Returns one page and an opaque continuation cursor.
  - body: { item_type?: string, page_size?: integer, next_cursor?: string, project_ids?: integer[], recent_only?: boolean, search_term?: string, with_counters?: boolean }
- `POST https://api.mcp.ai/api/teamwork/list/task/lists` — List Teamwork task lists, usually within one or more projects, so an agent can place or locate tasks.
  - body: { page_size?: integer, next_cursor?: string, project_ids?: integer[], search_term?: string, include_empty?: boolean, updated_after?: string, show_completed?: boolean, include_archived_projects?: boolean }
- `POST https://api.mcp.ai/api/teamwork/list/tasks` — List and filter Teamwork tasks by project, task list, assignee, dates, completion state, or tags. Returns one page and an opaque cursor for continuation.
  - body: { tag_ids?: integer[], due_after?: string, page_size?: integer, due_before?: string, next_cursor?: string, project_ids?: integer[], search_term?: string, task_filter?: string, task_list_ids?: integer[], assigned_user_ids?: integer[], include_completed?: boolean }
- `POST https://api.mcp.ai/api/teamwork/list/time/entries` — List accessible Teamwork time entries by project, task, person, date range, billing state, or tags. Returns one page and an opaque continuation cursor.
  - body: { tag_ids?: integer[], end_date?: string, task_ids?: integer[], user_ids?: integer[], page_size?: integer, start_date?: string, next_cursor?: string, project_ids?: integer[], billable_type?: string, invoiced_type?: string }
- `POST https://api.mcp.ai/api/teamwork/log/time/entry` — Log time against a Teamwork task with a date, duration, optional start time, description, person, billing state, and tags without changing task status.
  - body: { date: string, hours?: integer, is_utc?: boolean, minutes?: integer, tag_ids?: integer[], task_id: integer, user_id?: integer, start_time?: string, description?: string, is_billable?: boolean, fire_webhook?: boolean }
- `POST https://api.mcp.ai/api/teamwork/search/resources` — Search across Teamwork projects, tasks, task lists, milestones, people, companies, time entries, and other supported item types. Returns one page of lightweight references, optional sideloaded details
  - body: { limit?: integer, types?: string[], order_by?: string, project_id?: integer, next_cursor?: string, search_term: string, updated_after?: string, include_details?: string[], include_completed?: boolean, include_archived_projects?: boolean }
- `POST https://api.mcp.ai/api/teamwork/update/task` — Update selected fields of an existing Teamwork task while leaving omitted task fields unchanged.
  - body: { name?: string, tag_ids?: integer[], task_id: integer, due_date?: string, progress?: integer, is_private?: boolean, start_date?: string, description?: string, fire_webhook?: boolean, notify_assignees?: boolean, assignee_user_ids?: integer[], estimated_minutes?: integer }

## Example prompts
- "What can I do in Teamwork?"
- "Show me a summary of my Teamwork account"

## More
- Page: https://mcp.ai/teamwork
- Agent spec (llms.txt): https://mcp.ai/teamwork/llms.txt
- Postman collection: https://mcp.ai/teamwork/postman.json
