Two agents, one limit, one refused.

Tasks integration

Asana, in your agent's hands and under your limits.

Let an agent run the follow-ups without rewriting the plan. It reads projects and tasks, creates, updates and comments under a daily limit, and completing or deleting a task can wait for a person.

Connect

API key

bound to app.asana.com

What you create

  • A personal access token you create
  • It acts as the person who made it, so use an account limited to the right projects
  1. 01In Asana, open the developer console and create a personal access token.
  2. 02In Anlyon, open Actions, then Integrations, choose Asana and paste the token.
  3. 03Anlyon checks the token with Asana before storing it. It becomes a secret named ASANA, bound to app.asana.com.
  4. 04Have the id of the project your agent should add tasks to. It is the number in the project's URL.

Connecting allows nothing by itself. No API returns the credential afterwards, to you, to the console or to an agent, and Anlyon refuses to send it anywhere but app.asana.com.

Operations

Each one is a named tool, off until you switch it on, and Anlyon makes every call with the credential your agent never sees. Reads return what Asana answers and change nothing. Writes count against a limit you set, can wait for a person, and are read back from Asana wherever it allows.

Reads

List workspaces

asana-list-workspaces

List the workspaces and organizations the token can reach, 25 per page, with each one's gid and name. Asana returns next_page.offset when there are more; pass it as offset for the next page.

List projects

asana-list-projects

List the projects in one workspace, 25 per page, with name, archived, team and permalink. Pass archived=false to leave archived projects out. Asana returns next_page.offset when there are more; pass it as offset for the next page. Asana warns this can time out in very large organizations.

Get project

asana-get-project

Get one project: name, notes, owner, team, workspace, dates, archived and completed state, the latest status update's title, and its permalink.

List sections

asana-list-sections

List the sections of one project, 50 per page, with each one's gid and name, in project order. Asana returns next_page.offset when there are more; pass it as offset for the next page.

List project tasks

asana-list-project-tasks

List the tasks in one project, 25 per page, with name, completed, assignee, due date and permalink. Pass completed_since=now for incomplete tasks only (or an ISO 8601 date-time for tasks incomplete or completed since then). Asana returns next_page.offset when there are more; pass it as offset for the next page.

List section tasks

asana-list-section-tasks

List the tasks in one section, 25 per page, with name, completed, assignee, due date and permalink. Pass completed_since=now for incomplete tasks only. Asana returns next_page.offset when there are more; pass it as offset for the next page. Asana's reference labels this endpoint "board view only"; if it fails for a list-view project, use list-project-tasks.

Get task

asana-get-task

Get one task: name, notes, completed state, assignee, dates, parent, projects and sections, tags, followers, number of subtasks and permalink. Notes are returned in full; a very long task can be cut at 64 KB.

List subtasks

asana-list-subtasks

List the subtasks of one task, 25 per page, with name, completed, assignee, due date and permalink. Asana returns next_page.offset when there are more; pass it as offset for the next page.

List task stories

asana-list-task-stories

List a task's stories (comments and activity such as assignments and due-date changes), 20 per page, oldest first, with text, author, type and time. Pass resource_subtype=comment_added for comments only, and sort_ascending=false for newest first. Asana returns next_page.offset when there are more; pass it as offset for the next page.

List tags

asana-list-tags

List the tags in one workspace, 50 per page, with each one's gid, name and color. Asana returns next_page.offset when there are more; pass it as offset for the next page.

Writes

Create task

asana-create-task

Create one task in a project, with a name and notes.

project_gidnamenotes

Read back

Read back by task id; the name must match.

Comment on task

asana-comment-on-task

Add one comment to a task.

task_gidtext

Read back

Read back by the comment's id; the text must match.

Complete task

asana-complete-task

Mark one task complete.

task_gid

Read back

Read back from the task; it must be completed.

Reopen task

asana-reopen-task

Mark one completed task incomplete.

task_gid

Read back

Read back from the task; it must not be completed.

Update task

asana-update-task

Change one task's name, notes, due date (YYYY-MM-DD) or assignee ("me", a user gid or an email); only the fields given change.

task_gidnamenotesdue_onassignee

Read back

Read back from the task; its name, notes, due date and last-modified time must equal what Asana returned for this update. Limitations: it cannot clear a due date or unassign a task, and the read-back fails if someone else edits the task in between.

Create subtask

asana-create-subtask

Create one subtask under a task, with a name and optional notes, assignee ("me", a user gid or an email) and due date.

task_gidnamenotesassigneedue_on

Read back

Read back by the new subtask's id; the name and parent must match.

Add task to section

asana-add-task-to-section

Move one task into a section of a project it is already in, at the top of the section; Asana removes it from the project's other sections.

section_gidtask_gid

Read back

Read back from the task; its first project membership must be in this section.

Add follower

asana-add-follower

Add one follower ("me", a user gid or an email) to a task. A follower is notified of changes and can see the task even outside its projects.

task_gidfollower

Acknowledged

Sent once and acknowledged; not read back: a follower can be named as "me", a user gid or an email, while Asana lists followers by gid only, so a read-back cannot compare them.

Remove follower

asana-remove-follower

Remove one follower ("me", a user gid or an email) from a task.

task_gidfollower

Acknowledged

Sent once and acknowledged; not read back: a follower can be named as "me", a user gid or an email, while Asana lists followers by gid only, so a read-back cannot compare them.

Add tag

asana-add-tag

Add one existing tag (by gid, from list-tags) to a task.

task_gidtag_gid

Read back

Read back from the task; the tag must be among its tags.

Remove tag

asana-remove-tag

Remove one tag (by gid) from a task.

task_gidtag_gid

Read back

Read back from the task; the tag must no longer be among its tags.

Delete task

asana-delete-task

Delete one task (or subtask). Asana moves it to the deleting user's trash, where it can be restored in the Asana app for 30 days.

task_gid

Acknowledged

Sent once and acknowledged; not read back: Asana does not document what reading a deleted task returns.

Create section

asana-create-section

Create one section in a project.

project_gidname

Read back

Read back by the new section's id; the name and project must match.

Delete section

asana-delete-section

Delete one empty section. Asana refuses a section that still has tasks, and the last section of a project.

section_gid

Acknowledged

Sent once and acknowledged; not read back: Asana does not document what reading a deleted section returns.

The brake

Suggested limits

  • 100 tasks created a day
  • 300 comments a day
  • 100 tasks completed a day
  • 100 tasks reopened a day
  • 200 task updates a day
  • 100 subtasks created a day
  • 200 tasks moved to a section a day
  • 50 followers added a day
  • 50 followers removed a day
  • 200 tags added a day
  • 200 tags removed a day
  • 20 tasks deleted a day
  • 20 sections created a day
  • 20 sections deleted a day

Shared by every agent, session and key in the environment. You set the number.

Suggested approvals

  • A person approves completing a task
  • A person approves deleting a task
  • A person approves deleting a section
  • A person approves adding a follower
  • A person approves removing a follower

Installed turned off. The reviewer sees the exact request, and the approved request is the one that runs.

Before you rely on it

  • The token can do whatever its owner can do in Asana. The daily limits and the approval rule are what narrow the agent.
  • Asana has no idempotency key for these writes. Anlyon sends each one once and never repeats it.

Use it

1. Connect, from a terminal
npm install -g @anlyonhq/cli
anlyon auth login

# Shows where to create the key, then asks for it without echoing
anlyon connections add asana --secret ASANA

# From a clone of github.com/AnlyonHQ/anlyon-platform:
# see what would be installed, then switch on one operation
anlyon packs plan ./packs/asana
anlyon packs install ./packs/asana --action create-task --yes
2. Call it from your agent, TypeScript
import { Client } from "@anlyonhq/sdk";

const anlyon = new Client({ apiKey: process.env.ANLYON_AGENT_KEY! });

const { data } = await anlyon.actions.invoke(
  "asana-create-task",
  {
    "project_gid": "1208801234567890",
    "name": "Follow up with Acme",
    "notes": "They asked for the security review."
  },
);

if (data?.pendingApproval) {
  console.log("Waiting for a person", data.approvalId);
} else {
  console.log(data?.status, data?.responseStatus);
}
Or hand it to Claude Code over MCP
# Claude Code. Sign in with the browser, no key to paste.
claude mcp add --transport http anlyon https://api.anlyon.com/mcp

# Then ask in plain words. Each operation you switched on is a tool.

Prefer to click?

The console does all of it: connect, switch operations on, set the limit, and copy the setup for your agent.

Free tier, no credit card. One command if you use Claude or Cursor.

$ claude mcp add anlyon -- npx -y @anlyonhq/mcp-server