AI meets TeamworkFX

Connect TeamAI, Claude, Cursor, and other AI assistants to TeamworkFX. Create todos, manage projects, and collaborate using natural language.

TeamAI Setup

Connect TeamworkFX to the TeamAI platform

1

Open TeamAI Tools

In TeamAI, click Tools in the sidebar, then click Create tool in the upper right.

2

Configure Tool Settings

In the modal that appears:

  • Set Visibility to Personal
  • Set Tool Type to MCP Server
3

Add Basic Details

Name your tool something like TeamworkFX MCP, then click Server Setup.

4

Configure Server Connection

Enter the MCP Server URL:

MCP Server URL
https://teamworkfx-mcp.com/mcp
5

Sign In with OAuth

Select OAuth authentication — no API keys or headers are needed. When prompted, sign in with your WebFX Google account to authorize the connection.

6

Save & Start Using

Click Save. You can now use TeamworkFX tools in your chats!

Cursor Setup

Connect TeamworkFX to Cursor IDE

1

Open MCP Settings

In Cursor, go to SettingsMCP Servers, or press Cmd+Shift+P / Ctrl+Shift+P and search for "MCP".

2

Add Configuration

Add this to your MCP configuration — no API key needed:

~/.cursor/mcp.json
{
  "mcpServers": {
    "teamworkfx": {
      "url": "https://teamworkfx-mcp.com/mcp"
    }
  }
}
3

Sign In

Cursor will show the server as needing authentication. Click Login next to it, then sign in with your WebFX Google account in the browser window that opens.

4

Test It

Try: "Search for projects with 'Website' in the name"

Claude Desktop Setup

Connect TeamworkFX to the Claude Desktop app

1

Open Connector Settings

In Claude Desktop, go to SettingsConnectors, then click Add custom connector.

2

Add the Server

Name it TeamworkFX and enter the server URL:

Remote MCP server URL
https://teamworkfx-mcp.com/mcp

No API key or headers are needed — authentication happens in the next step.

3

Sign In

Click Connect. A browser window opens — sign in with your WebFX Google account to authorize the connection.

4

Start Using

The TeamworkFX tools will appear in your chat. Enable or disable individual tools from the connector's settings.

Claude Code Setup

Connect TeamworkFX to Claude Code (CLI)

1

Install Claude Code

If you haven't already, install Claude Code:

Terminal
npm install -g @anthropic-ai/claude-code
2

Add MCP Server

Run this command to add the TeamworkFX MCP server:

Terminal
claude mcp add --transport http teamworkfx https://teamworkfx-mcp.com/mcp

No API key or headers are needed.

3

Sign In

Launch claude and run /mcp. Select teamworkfx and choose Authenticate — a browser window opens where you sign in with your WebFX Google account.

4

Start Using

That's it — TeamworkFX tools are now available in your Claude Code sessions.

Tool Documentation

Complete reference for all 41 tools

Response Shapes

Every tool returns JSON in one of four shapes. List tools return {_meta: {totals, pagination}, <plural>: [...]} (e.g. {_meta: {totalTodos, hasMoreTodos}, todos: [...]}); single-item tools return {<singular>: {...}} (e.g. {todo: {...}}); create/update/delete tools return {result: {success, <entityId>, message}}; tools that mutate several entities in one call (like reorder_todos) return {<plural>: [{<entityId>, <changed fields>}, ...]} (e.g. {todos: [{todoId, position}, ...]}). Response keys are entity-named, and optional data (like custom columns) appears only when requested.

Todos

Create, search, update, and manage todos

get_todo

Get single todo by ID with full details

Parameters
todoId*
Todo ID to retrieve
includeColumns
Specific custom columns to include, by fieldId or name (e.g. ["Client Name"]); unset values return as null
fields
Fields to return: description, parentTodoId, position, isHeader, status, priority, project, todolist, responsibleUser, creatorUser, startDate, actionDate, dueDate, completedAt, createdAt, updatedAt, estimatedHours, milestoneId, subTodoCounts, commentCount, columns (custom column values, opt-in)
list_todos

Search todos with advanced filtering. Excludes completed todos by default.

Parameters
projectId
Project ID, or array of IDs (todos in ANY)
todolistId
Todolist ID, or array of IDs
responsibleUserId
Assignee user ID, or array of IDs
title
Search todo title (fuzzy matching)
description
Search todo description (fuzzy matching)
status
Status name, or array of names (e.g., "In Progress")
priority
Priority level filter: Low, Medium, High, or Urgent
includeCompleted
Include completed todos (default: false)
dueDateBefore
Todos due before this date (YYYY-MM-DD)
dueDateAfter
Todos due after this date (YYYY-MM-DD)
startDateBefore
Todos that start before this date (YYYY-MM-DD)
startDateAfter
Todos that start after this date (YYYY-MM-DD)
actionDateBefore
Todos on which to take action before this date (YYYY-MM-DD)
actionDateAfter
Todos on which to take action after this date (YYYY-MM-DD)
overdue
Only overdue todos
includeColumns
Specific custom columns to include on each todo, by fieldId or name (e.g. ["Client Name"]); unset values return as null
columnFilters
Filter by custom column values: array of { column, operator, value }. Use list_columns to discover columns and dropdown values
skip
Number of todos to skip (default: 0)
limit
Maximum todos to return (default: 1000, max: 1000)
sortBy
Field to sort by (default: position)
sortOrder
Sort direction: asc or desc (default: asc)
fields
Fields to return: description, parentTodoId, position, isHeader, status, priority, project, todolist, responsibleUser, creatorUser, startDate, actionDate, dueDate, completedAt, createdAt, updatedAt, estimatedHours, milestoneId, subTodoCounts, commentCount, columns (custom column values, opt-in)
create_todo

Create new todo in a todolist

Parameters
title*
Todo title
todolistId*
Todolist ID to add todo to
description
Todo description in Markdown format
parentTodoId
Parent todo ID to create subtask under
responsibleUserId
User ID to assign todo to
startDate
Start date in YYYY-MM-DD format
actionDate
Action date in YYYY-MM-DD format
dueDate
Due date in YYYY-MM-DD format
priority
Priority: Low, Medium, High, or Urgent
estimatedHours
Estimated hours to complete
header
Promote todo to header row (section divider) with given color: blue-vivid, teal, green, red, purple, or gray
position
1-based position among sibling todos (subtasks under same parent, or top-level todos in the todolist). Other todos shift to make room
columns
Set custom column values: array of { column, value }. Dropdowns accept option name or value; null clears. Use list_columns to discover columns
update_todo

Update todo properties (not assignment or move)

Parameters
todoId*
Todo ID to update
title
New todo title
description
New description in Markdown format
startDate
New start date (YYYY-MM-DD)
actionDate
New action date (YYYY-MM-DD)
dueDate
New due date (YYYY-MM-DD)
priority
New priority level: Low, Medium, High, or Urgent
estimatedHours
New estimated hours
header
Promote todo to header row (section divider) with given color (blue-vivid, teal, green, red, purple, or gray), or null to remove header status
position
1-based position among sibling todos (subtasks under same parent, or top-level todos in the todolist). Other todos shift to make room
columns
Set custom column values: array of { column, value }. Dropdowns accept option name or value; null clears. Use list_columns to discover columns
assign_todo

Assign/reassign todo to a user

Parameters
todoId*
Todo ID to assign
userId*
User ID to assign todo to
move_todo

Move todo to different todolist

Parameters
todoId*
Todo ID to move
todolistId*
Destination todolist ID
reorder_todos

Reorder multiple todos in one call by setting each todo's 1-based position among its siblings. More efficient than calling update_todo separately per todo. Use list_todos first to see current positions

Parameters
todos*
Todos to reposition: array of { todoId, position }, each with its target 1-based position
delete_todo

⚠️ USE WITH CAUTION: Permanently deletes a todo and all its subtodos

Parameters
todoId*
Todo ID to delete

Columns

Discover the custom columns available on your todolists

list_columns

List custom columns for a todolist — global columns plus columns assigned to the todolist, its project, or its company. Returns each column's fieldId, name, type, and dropdown options (name → filter value)

Parameters
todolistId*
Todolist ID to list columns for. Use list_todolists to find ID by name

Todolists

Organize todos into lists within projects

get_todolist

Get single todolist by ID

Parameters
todolistId*
Todolist ID to retrieve
fields
Fields to return: name, projectId, completed, url
list_todolists

Get todolists for a project with optional name search

Parameters
projectId*
Project ID to filter by
name
Todolist name to search (fuzzy matching)
limit
Maximum todolists to return (default: 100, max: 1000)
skip
Number to skip for pagination (default: 0)
fields
Fields to return: name, projectId, completed, url
create_todolist

Create new todolist in a project

Parameters
projectId*
Project ID to create todolist in
name*
Todolist name
private
Create todolist as private (true). Omitting or false creates a public todolist. Cannot be undone through the MCP
update_todolist

Update todolist properties

Parameters
todolistId*
Todolist ID to update
name
New name for the todolist
description
New description
completed
Mark as completed (true/false)
private
Set todolist to private (true). Omitting or false leaves privacy unchanged. Cannot be undone through the MCP
milestoneId
Associate with milestone ID (null to remove)
delete_todolist

⚠️ USE WITH CAUTION: Permanently deletes a todolist and all its todos

Parameters
todolistId*
Todolist ID to delete

Milestones

Track major deliverables and goals

get_milestone

Get single milestone by ID

Parameters
milestoneId*
Milestone ID to retrieve
fields
Fields to return: description, dueDate, responsibleUserId, responsibleCompanyId, completedAt, completed, todolistId, creatorUser, completerUserId, private, createdAt, updatedAt
list_milestones

Get milestones for a project with filters

Parameters
projectId*
Project ID to get milestones from
name
Milestone name to search (fuzzy matching)
completed
Filter by completion status
dueDateBefore
Milestones due before this date (YYYY-MM-DD)
dueDateAfter
Milestones due after this date (YYYY-MM-DD)
limit
Maximum to return (default: 100, max: 1000)
skip
Number to skip for pagination (default: 0)
sortOrder
Sort by due date: asc or desc (default: asc)
fields
Fields to return: description, dueDate, completedAt, completed, todolistId, responsibleUserId, responsibleCompanyId, creatorUserId, private, createdAt, updatedAt
create_milestone

Create new milestone in a project

Parameters
projectId*
Project ID to create milestone in
title*
Title of the milestone
dueDate*
Due date (YYYY-MM-DD format)
responsibleUserId
User ID responsible for milestone
responsibleCompanyId
Company ID responsible for milestone
description
Optional description
private
Whether the milestone is private (default: false)
update_milestone

Update milestone properties

Parameters
milestoneId*
Milestone ID to update
title
New title
description
New description
dueDate
New due date (YYYY-MM-DD)
responsibleUserId
New responsible user ID
responsibleCompanyId
New responsible company ID
completedAt
Completion date (ISO format) or null
completerUserId
User ID who completed milestone
private
Whether the milestone is private
delete_milestone

⚠️ USE WITH CAUTION: Permanently deletes a milestone

Parameters
milestoneId*
Milestone ID to delete

Comments

Discussion on todos, messages, and milestones

get_comment

Get single comment by ID

Parameters
commentId*
Comment ID to retrieve
fields
Fields to return: body, isMarkdown, creatorUser, projectId, todoId, messageId, milestoneId, createdAt, updatedAt
list_comments

Get comments for a todo, message, or milestone

Parameters
todoId
Todo ID to get comments for
messageId
Message ID to get comments for
milestoneId
Milestone ID to get comments for
limit
Maximum comments to return (default: 100, max: 500)
skip
Number to skip for pagination (default: 0)
sortOrder
Sort order: asc or desc (default: desc)
fields
Fields to return: body, isMarkdown, creatorUser, projectId, createdAt, updatedAt
create_comment

Create comment on todo, message, or milestone

Parameters
body*
Comment text (plain text or Markdown)
todoId
Todo ID to comment on
messageId
Message ID to comment on
milestoneId
Milestone ID to comment on
isMarkdown
Whether body is Markdown (default: false)
mentions
User IDs mentioned in body
subscribers
User IDs to notify
update_comment

Update comment within 15 minutes of creation

Parameters
commentId*
Comment ID to update
body
New comment text
isMarkdown
Whether body is Markdown
mentions
User IDs mentioned in body
subscribers
User IDs to notify
delete_comment

⚠️ USE WITH CAUTION: Permanently deletes a comment

Parameters
commentId*
Comment ID to delete

Mentions

User @mentions across todos, comments, and messages

list_mentions

Get your @mentions in messages and comments. Mentions available from July 2025 onwards. You can only retrieve your own mentions.

Parameters
userId*
Your user ID
mentionTypes
Mention types: todo, comment, message (OR logic). Default: ["comment"]
onlyUnread
Only unread mentions (default: false)
createdAfter
Start date (YYYY-MM-DD, default: 7 days ago)
createdBefore
End date (YYYY-MM-DD, default: today)
limit
Max results (default: 100, max: 500)
skip
Skip results for pagination (default: 0)
sortOrder
Sort by createdAt: asc or desc (default: desc)
excludeContent
Exclude full comment/message/todo content to reduce tokens (default: false)

Messages

Project announcements and discussions

get_message

Get single message by ID

Parameters
messageId*
Message ID to retrieve
fields
Fields to return: title, content, isMarkdown, private, projectId, creatorUser, categoryId, milestoneId, todoId, pinnedAt, createdAt, updatedAt
list_messages

Get messages for a project with filters

Parameters
projectId*
Project ID to search messages in
title
Message title to search (fuzzy matching)
creatorUserId
Creator user ID, or array of IDs (ANY match)
limit
Maximum to return (default: 100, max: 500)
skip
Number to skip for pagination (default: 0)
sortOrder
Sort order: asc or desc (default: desc)
fields
Fields to return: title, content, isMarkdown, private, projectId, creatorUser, categoryId, pinnedAt, createdAt, updatedAt
create_message

Create new message in a project

Parameters
projectId*
Project ID to create message in
title*
Message title/subject
content*
Message body (plain text or Markdown)
categoryId
Category ID for message organization
todoId
Todo ID to associate message with
milestoneId
Milestone ID to associate message with
isMarkdown
Whether content is Markdown (default: false)
private
Whether message is private (default: false)
mentions
User IDs mentioned in body
subscribers
User IDs to notify
update_message

Update message properties

Parameters
messageId*
Message ID to update
title
New title
content
New content/body
categoryId
Category ID, or null to remove
todoId
Todo ID to associate, or null to remove
milestoneId
Milestone ID to associate, or null to remove
isMarkdown
Whether content is Markdown
private
Whether the message is private
delete_message

⚠️ USE WITH CAUTION: Permanently deletes a message

Parameters
messageId*
Message ID to delete

Message Categories

Organize messages into categories

get_message_category

Get single message category by ID

Parameters
categoryId*
Category ID to retrieve
list_message_categories

Get message categories for a project

Parameters
projectId*
Project ID to get categories from
name
Filter by category name (partial match)
limit
Maximum to return (default: 100, max: 100)
skip
Number to skip for pagination (default: 0)
create_message_category

Create new message category in a project

Parameters
name*
Category name
projectId*
Project ID to create category in
type
Category type: message or template (default: message)
update_message_category

Update message category name or type

Parameters
categoryId*
Category ID to update
name
New category name
type
New category type: message or template
delete_message_category

⚠️ USE WITH CAUTION: Permanently deletes a message category

Parameters
categoryId*
Category ID to delete

Projects

Search and retrieve project information

get_project

Get single project by ID

Parameters
projectId*
Project ID to retrieve
fields
Fields to return: name, company, private, url
list_projects

Search projects by name with optional company filter

Parameters
name*
Project name to search (fuzzy matching)
companyId
Company ID, or array of IDs (ANY match)
limit
Maximum to return (default: 100, max: 100)
skip
Number to skip for pagination (default: 0)
fields
Fields to return: name, company, private, url

Companies

Search clients and companies

get_company

Get single company by ID

Parameters
companyId*
Company ID to retrieve
fields
Fields to return: name, active, qboId, category, netsuiteId, industry, rollupIndustry
list_companies

Search companies by name

Parameters
name*
Company name to search (fuzzy matching)
active
Filter by active status (default: true)
limit
Maximum to return (default: 1000, max: 1000)
skip
Number to skip for pagination (default: 0)
fields
Fields to return: name, active, qboId, category, netsuiteId, industry, rollupIndustry

Users

Find team members for assignments

get_user

Get single user by ID

Parameters
userId*
User ID to retrieve
fields
Fields to return: firstName, lastName, email, title, activeWebFXEmployee
list_users

Search users by name or email

Parameters
email
Email address to search (exact match)
firstName
First name to search
lastName
Last name to search
fields
Fields to return: firstName, lastName, email, title, activeWebFXEmployee

Frequently Asked Questions

Common questions about the TeamworkFX MCP server

What is MCP?

MCP (Model Context Protocol) is a standard for connecting AI assistants to external tools and data sources. It allows TeamAI, Claude, Cursor, and other AI tools to interact with services like TeamworkFX.

How do I authenticate?

Everything is authenticated through OAuth — no API keys needed. The first time your AI tool connects, a browser window opens where you sign in with your WebFX Google account to authorize the connection.

Is my data secure?

Yes. Every request is authenticated through OAuth with your WebFX Google account, and data is transmitted securely over HTTPS. The MCP server only accesses data your TeamworkFX account has permission to view.

Can I delete items through MCP?

Yes. Delete tools are available for todos, todolists, milestones, messages, message categories, and comments. Use with caution as delete operations permanently remove data and cannot be undone.

Which AI tools are supported?

TeamAI, Cursor, Claude Desktop, and Claude Code are officially supported. Any MCP-compatible client should work with the HTTP transport.

What transport types are supported?

Only Streamable HTTP transport is supported.

How do I troubleshoot connection issues?

Make sure you completed the OAuth sign-in with your WebFX Google account, check the MCP server URL for typos, and ensure you've fully restarted your AI tool after configuration changes. If your session expired, re-authenticate from your tool's MCP settings.