Connect
Optimize
Secure
Announcing StackOne Defender: leading open-source prompt injection guard for your agent • Read More →
Production-ready Asana MCP server with 126 extensible actions — plus built-in authentication, security, and optimized execution.
Coverage
Create, read, update, and delete across Asana — and extend your agent's capabilities with custom actions.
Authentication
Per-user OAuth in one call. Your Asana MCP server gets session-scoped tokens with zero credentials stored on your infra.
Agent Auth →Security
Every Asana tool response scanned for prompt injection in milliseconds — 88.7% accuracy, all running on CPU.
Prompt Injection Defense →Performance
Free up to 96% of your agent's context window to enhance reasoning and reduce cost, on every Asana call.
Tools Discovery →A Asana MCP server lets AI agents read and write Asana data through the Model Context Protocol — Anthropic's open standard for connecting LLMs to external tools. StackOne's Asana MCP server ships with 126 pre-built actions, fully extensible via the Connector Builder — plus managed authentication, prompt injection defense, and optimized agent context. Connect it from MCP clients like Claude Desktop, Cursor, and VS Code, or from agent frameworks like OpenAI Agents SDK, LangChain, and Vercel AI SDK.
Every action from Asana's API, ready for your agent. Create, read, update, and delete — scoped to exactly what you need.
Get all attachments for a specific parent object (task or project)
Get details of a specific attachment
Delete an attachment from a task or project
Creates a new custom field in a workspace. Every custom field is required to be created in a specific workspace, and this workspace cannot be changed once set. A custom field's name must be unique within a workspace and not conflict with names of existing task properties such as Due Date or Assignee. A custom field's type must be one of text, enum, multi_enum, number, date, or people. Returns the full record of the newly created custom field
Returns a list of the compact representation of all of the custom fields in a workspace
Get details of a specific custom field
A specific, existing custom field can be updated by making a PUT request on the URL for that custom field. Only the fields provided in the data block will be updated; any unspecified fields will remain unchanged. When using this method, it is best to specify only those fields you wish to change, or else you may overwrite changes made by another user since you last retrieved the custom field. A custom field's type cannot be updated. An enum custom field's enum_options cannot be updated with this endpoint. Instead see Work With Enum Options for information on how to update enum_options. Locked custom fields can only be updated by the user who locked the field. Returns the complete updated custom field record
Creates an enum option and adds it to this custom field's list of enum options. A custom field can have at most 50 enum options (including disabled options). By default, new enum options are inserted at the end of a custom field's list. Locked custom fields can only have enum options added by the user who locked the field. Returns the full record of the newly created enum option
Updates an existing enum option. Enum options are ordered by creation time with the most recently created at the top. Locked custom fields can only have enum options updated by the user who locked the field. Returns the complete updated enum option record
Add one or more dependencies to a task (tasks that must be completed before this task)
Remove one or more dependencies from a task
Add one or more dependents to a task (tasks that depend on this task being completed)
Remove one or more dependents from a task
Create a new goal in a workspace or team.
Get goals in a workspace or portfolio
Get details of a specific goal
Update properties of an existing goal
Delete a goal
Add a subgoal to a parent goal
Remove a subgoal from a parent goal
Add a user or team as a member of a goal, project, portfolio, or custom_field
Get all memberships for a parent object (goal, project, portfolio, or custom_field)
Get details of a specific membership
Update an existing membership. Only the fields provided in the data block will be updated; any unspecified fields will remain unchanged. Memberships on goals, projects, portfolios, and custom_fields can be updated
Remove a member from a project or goal
Request a complete export of an organization's data in JSON format (Enterprise+ only)
Get the status and download URL of an organization export request
Create a new portfolio in a workspace
Get all portfolios in a workspace
Get details of a specific portfolio
Update properties of an existing portfolio
Delete a portfolio
Create a new project in a workspace or team. If the workspace for your project is an organization, you must also supply a team to share the project with.
Get all projects in a workspace
Get details of a specific project
Update an existing project
Delete a project permanently
Get all project templates in a workspace or team
Get details of a specific project template
Create a new task in Asana
Advanced search for tasks in a workspace with multiple filters
Returns the compact task records for some filtered set of tasks. Use one or more of the parameters provided to filter the tasks returned. You must specify a project or tag if you do not specify assignee and workspace.
Get a single task by ID
Update an existing task in Asana
Delete a task from Asana
Create a new section in a project
Get all sections in a project (board columns or list headers)
Get details of a specific section
Update properties of an existing section
Delete a section from a project
Creates a new status update on an object. Returns the full record of the newly created status update. Requires either text or html_text to be provided.
Returns the compact status update records for all updates on the object
Get details of a specific status update
Delete a status update
Adds a story to a task. This endpoint currently only allows for comment stories to be created. The comment will be authored by the currently authenticated user, and timestamped when the server receives the request. Returns the full record for the new story added to the task. Requires either text or html_text to be provided
Get details of a specific story
Updates the story and returns the full record for the updated story. Only comment stories can have their text updated, and only comment stories and attachment stories can be pinned. Only one of text and html_text can be specified
Delete a story/comment from a task
Creates a new subtask and adds it to the parent task. Returns the full record for the newly created subtask
Get all subtasks for a specific task
Create a new tag in a workspace
Get all tags in a workspace
Get details of a specific tag
Update properties of an existing tag
Get task templates from a project (Premium feature)
Get a single task template by ID (Premium feature)
Get all teams in a workspace
Get details of a specific team
Update a team's properties and access controls
Get all time periods in a workspace, optionally filtered by date range
Get details of a specific time period
Creates a time tracking entry on a given task. Returns the record of the newly created time tracking entry
Returns the complete time tracking entry record for a single time tracking entry
A specific, existing time tracking entry can be updated by making a PUT request on the URL for that time tracking entry. Only the fields provided in the data block will be updated; any unspecified fields will remain unchanged. When using this method, it is best to specify only those fields you wish to change, or else you may overwrite changes made by another user since you last retrieved the task. Returns the complete updated time tracking entry record
Delete a time tracking entry
Get all users in a workspace
Get details of a specific user
Create a new webhook to receive notifications about changes to a resource
Get the compact representation of all webhooks your app has registered for the authenticated user in the given workspace
Returns the full record for the given webhook
An existing webhook's filters can be updated by making a PUT request on the URL for that webhook. Note that the webhook's previous filters array will be completely overwritten by the filters sent in the PUT request
This method permanently removes a webhook. Note that it may be possible to receive a request that was already in flight after deleting the webhook, but no further requests will be issued
Get all workspaces accessible to the authenticated user
Get details of a specific workspace
Update properties of a workspace
Custom fields are associated with projects by way of custom field settings. This method creates a setting for the project
Custom fields are associated with portfolios by way of custom field settings. This method creates a setting for the portfolio
Add a project to a portfolio
Add users as members to a project
Add users as followers to a project
Add a task to a specific section
Add a tag to a task
Add one or more followers to a task
Add a task to an additional project
Add a user to a team
Add a user to a workspace or organization. The user can be referenced by their globally unique user ID or their email address. Returns the full user record for the invited user
Get audit log events for enterprise security and compliance monitoring
Get events on a resource for real-time change tracking
Get all projects in a portfolio
Get all tasks in a project
Get all stories (activity feed and comments) for a task
Get all users in a team
Returns time tracking entries for a given task
Get details of the authenticated user
Get a user's favorites
Get all teams a user belongs to
Get workspace memberships for a user
Get team memberships for a user
Returns the full record for a user's task list
Returns the compact list of tasks in a user's My Tasks list. Note - Access control is enforced for this endpoint as with all Asana API endpoints, meaning a user's private tasks will be filtered out if the API-authenticated user does not have access to them. Note - Both complete and incomplete tasks are returned by default unless they are filtered out (for example, setting completed_since=now will return only incomplete tasks, which is the default view for My Tasks in Asana)
Set or change the parent task for a task to make it a subtask
Removes a custom field setting from a project
Removes a custom field setting from a portfolio
Remove a project from a portfolio
Remove users from project members
Remove users from project followers
Remove a tag from a task
Remove one or more followers from a task
Remove a task from a project
Remove a user from a team
Remove a user from a workspace or organization. The user making this call must be an admin in the workspace. The user can be referenced by their globally unique user ID or their email address. When invoked using a Service Account Token (SAT), this endpoint follows the same behavior as the SCIM API Delete endpoint. When invoked using a Personal Access Token (PAT), the endpoint behaves similarly, except that ownership of the user's resources is transferred to the PAT owner instead of the admin specified in the Admin Console. Note - If you wish to retain access to a user's private resources (i.e., those visible only to that user), you have to make them public manually (or ask the user to do so) before removal. Returns an empty data record
Create a duplicate of a project
Create a new project from a template
Search for objects in a workspace by name for autocomplete
Create a copy of an existing task with optional field inclusions
Creates and returns a job that will asynchronously handle the task instantiation
One endpoint. Any framework. Your agent is talking to Asana in under 10 lines of code.
MCP Clients
Agent Frameworks
{
"mcpServers": {
"stackone": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"https://api.stackone.com/mcp?x-account-id=<account_id>",
"--header",
"Authorization: Basic <YOUR_BASE64_TOKEN>"
]
}
}
}172+ actions
134+ actions
134+ actions
133+ actions
133+ actions
125+ actions
123+ actions
Anthropic's code_execution processes data already in context. Custom MCP code mode keeps raw tool responses in a sandbox. 14K tokens vs 500.
11 min
Benchmarking BM25, TF-IDF, and hybrid search for MCP tool discovery across 916 tools. The 80/20 TF-IDF/BM25 hybrid hits 21% Top-1 accuracy in under 1ms.
10 min
MCP tools that read emails, CRM records, and tickets are indirect prompt injection vectors. Here's how we built a two-tier defense that scans tool results in ~11ms.
12 min
origin_owner_id.All the tools you need to build and scale AI agent integrations, with best-in-class connectivity, execution, and security.