# Moco

> MOCO through One

- Skill: `withoneai/moco` (Agent Skill)
- Install (CLI): `npx skillmds@latest add withoneai/moco`
- Raw SKILL.md: https://api.skillmd.com/api/skills/withoneai/moco/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: withoneai (https://skillmd.com/u/withoneai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/withoneai/moco

---


# MOCO through One

MOCO is a business management platform for agencies and service-based teams that provides project planning, time tracking, invoicing, budgeting, and resource management, allowing organizations to manage operations and financial workflows from a single system with integration and reporting capabilities.

One exposes MOCO through four MCP tools. The table below carries real action ids from One's knowledge base, so for a common operation you can skip search and go straight to reading the action's parameters.

## How to run an action

1. Find the action in the table below, or call `search_one_platform_actions` with platform `moco` if it is not listed.
2. Call `get_one_action_knowledge` with the action id. Do this every time, including for actions in this table. The table gives you the id, not the parameters.
3. Call `execute_one_action` with parameters copied from that knowledge.

Never guess a parameter name, a body field, or an enum value. The knowledge has the real schema, and a guessed field is either a 400 or a silent write of the wrong thing.

## Before you start

Call `list_one_integrations` once and confirm MOCO is connected. If it is missing, the user has not connected it: say so and point them at https://app.withone.ai rather than reaching for raw HTTP.

Each connection carries an `access` field. If it reports `{"policy": "methods", "methods": ["GET"]}` the agent is read-only here, so plan a read-only answer instead of attempting a write that will be refused.

## Before a write

Creates, updates, deletes and sends land on a real MOCO account and cannot be recalled. State the action and the specific target in one line before the first write in a task, and let the user stop you. Reads need no confirmation.

## Actions

### Projects

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Project | GET | `/api/v1/projects/{{id}}` | `conn_mod_def::GLK3EAsXzGA::XxNXgupITOylu1a_xjIOUA` |
| Get Project Report | GET | `/api/v1/projects/{{id}}/report` | `conn_mod_def::GLK3D_l7AmA::xanujcnhQnm8wZRQjUfQGA` |
| List Projects | GET | `/api/v1/projects` | `conn_mod_def::GLK3EJIiO6A::oCXnC1X8Q5i_0Bek9Rwt4w` |
| List Projects Assigned To Current User | GET | `/api/v1/projects/assigned` | `conn_mod_def::GLK3EAsqOyA::XmzUZMl1RDKDmaIa9l0hRQ` |
| Archive Project | PUT | `/api/v1/projects/{{id}}/archive` | `conn_mod_def::GLK3Dzvinfg::cnrSWldLQFyAwVxQEahIHQ` |
| Assign Project To Project Group | PUT | `/api/v1/projects/{{id}}/assign_project_group` | `conn_mod_def::GLK3Dxu5T2g::kR28sORtQ9S5UYkZcp7-Fw` |
| Create Project | POST | `/api/v1/projects` | `conn_mod_def::GLK3DxNm_CA::eO3MxBPMToqnUJAdhbcH1Q` |
| Delete Project | DELETE | `/api/v1/projects/{{id}}` | `conn_mod_def::GLK3D3LuuBg::xw0N00IBQd23r5PMnTMfZw` |
| Disable Project Report Sharing | PUT | `/api/v1/projects/{{id}}/disable_share` | `conn_mod_def::GLK3Dw2C1jA::5J1sxv2dR3q334Sc_4JiWw` |
| Enable Project Report Sharing | PUT | `/api/v1/projects/{{id}}/share` | `conn_mod_def::GLK3EA3-nIg::NgaTdzq-QyqWXX5spegJgw` |
| Recur Project Recurring Expense | POST | `/api/v1/projects/{{projectId}}/recurring_expenses/{{id}}/recur` | `conn_mod_def::GLK3G2vJHvA::UFUr_MPnR9C_0ZU2bMozEw` |
| Unarchive Project | PUT | `/api/v1/projects/{{id}}/unarchive` | `conn_mod_def::GLK3EQVKQlg::MivBNwMMSSurOCZndrbNVw` |

6 more Projects actions are available through search.

### Activities

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Activity | GET | `/api/v1/activities/{{id}}` | `conn_mod_def::GLK2_8ZcoBA::cRkkhCXZQpm0_YvGT7CGhw` |
| List Activities | GET | `/api/v1/activities` | `conn_mod_def::GLK3AAXTUGg::qFKIyAGoRQuAjO1qsUfmBw` |
| Create Activities In Bulk | POST | `/api/v1/activities/bulk` | `conn_mod_def::GLK2_hn4qBA::J8bSY6uYTSq9RBxjgoE0nQ` |
| Create Activity | POST | `/api/v1/activities` | `conn_mod_def::GLK2_g4jOOg::ZP92RW1STdif5k0Rdq7ZRw` |
| Delete Activity | DELETE | `/api/v1/activities/{{id}}` | `conn_mod_def::GLK2_ziabwA::gvJIFdx7SYmqzB_ZukgVLA` |
| Disregard Activities For Invoicing | POST | `/api/v1/activities/disregard` | `conn_mod_def::GLK2_8Osi6A::wdl_V1ScQE-ZqexarKxZMg` |
| Start Activity Timer | PATCH | `/api/v1/activities/{{id}}/start_timer` | `conn_mod_def::GLK2_8x5OyA::SqQCJONiTbyCb6TA4ZyKew` |
| Stop Activity Timer | PATCH | `/api/v1/activities/{{id}}/stop_timer` | `conn_mod_def::GLK2_7zT3CA::v4VhXgxxTaCxkKW8b5-XPw` |
| Update Activity #1 | PUT | `/api/v1/activities/{{id}}` | `conn_mod_def::GLK3AJtDwNg::o4eeD_b8SKuiEjw6HXMFoQ` |
| Update Activity #2 | PATCH | `/api/v1/activities/{{id}}` | `conn_mod_def::GLK3AJVD0aA::hZgEFG9kSh-MvD15ZjLsOA` |
| Update Activity Billable Seconds | PATCH | `/api/v1/activities/{{id}}/billable_seconds` | `conn_mod_def::GLK3AJNOO2A::yv31iujbReu1j9Af9itgQA` |

### Purchases

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Purchase | GET | `/api/v1/purchases/{{id}}` | `conn_mod_def::GLK3FPKlOxg::BBKLpFIRR1Wixa3tASfmFQ` |
| List Purchases | GET | `/api/v1/purchases` | `conn_mod_def::GLK3FViuJDg::OkJUhwriQYq4N4VwJKvc9g` |
| Assign Purchase Item To Project | POST | `/api/v1/purchases/{{id}}/assign_to_project` | `conn_mod_def::GLK3FGQMvqg::r1BETPnXR3uxJVBYHJNdoA` |
| Create Purchase | POST | `/api/v1/purchases` | `conn_mod_def::GLK3FFA3oHg::ulMVShqiReiA1sKFdx8t2g` |
| Delete Purchase | DELETE | `/api/v1/purchases/{{id}}` | `conn_mod_def::GLK3FFnKP9g::JfuAdw58RleTCgTBkijcmg` |
| Store Purchase Document | PATCH | `/api/v1/purchases/{{id}}/store_document` | `conn_mod_def::GLK3FRNPMyg::o2TmmevWTrSjxCQfrq47MQ` |
| Update Purchase #1 | PUT | `/api/v1/purchases/{{id}}` | `conn_mod_def::GLK3GaHJcLA::6pyQ9IHKTNeqLD3OMmRgHA` |
| Update Purchase #2 | PATCH | `/api/v1/purchases/{{id}}` | `conn_mod_def::GLK3FRQ-IyA::onPNhznsS-W2Ng_NsV6hjQ` |
| Update Purchase Status | PATCH | `/api/v1/purchases/{{id}}/update_status` | `conn_mod_def::GLK3GjETwJA::PgalbWPXR0aZk8akI7TBQw` |

### Invoices

| Action | Method | Path | Action id |
|---|---|---|---|
| Download Invoice PDF | GET | `/api/v1/invoices/{{id}}.pdf` | `conn_mod_def::GLK3CcH_Keg::JjotC9X4RBaum2G5Cu-S_g` |
| Download Invoice Timesheet PDF | GET | `/api/v1/invoices/{{id}}/timesheet.pdf` | `conn_mod_def::GLK3CcQee8A::Dpqn5_7sS3Cgm1dKa-NNbA` |
| Get Invoice | GET | `/api/v1/invoices/{{id}}` | `conn_mod_def::GLK3Cd7ugyg::ktash2RWTtmnHT9tTD9GlQ` |
| List Invoices | GET | `/api/v1/invoices` | `conn_mod_def::GLK3CsC4wig::CySNlpi4RLSJS6UoXiDP2A` |
| List Locked Invoices | GET | `/api/v1/invoices/locked` | `conn_mod_def::GLK3ComY8Sg::0NxkdjGvSo6LmkVZ76zmQA` |
| Create Invoice | POST | `/api/v1/invoices` | `conn_mod_def::GLK3CRLRdeg::EgOilQloRc6bwGwSVaEHpA` |
| Delete Invoice | DELETE | `/api/v1/invoices/{{id}}` | `conn_mod_def::GLK3CcMZ3QA::ZkcwJxD9TGOucipfWovFUQ` |
| Send Invoice By Email | POST | `/api/v1/invoices/{{id}}/send_email` | `conn_mod_def::GLK3Cm5gvcg::MPR3Qv7sTKaBkO9YxNz1Pg` |
| Update Invoice Status | PUT | `/api/v1/invoices/{{id}}/update_status` | `conn_mod_def::GLK3CmsxFTA::Lq3Ar3l6T1uzbPgRVHT3OA` |

### AccountWebHooks

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Account Web Hook | GET | `/api/v1/account/web_hooks/{{id}}` | `conn_mod_def::GLK2_Xjr3cA::-ucCyyW2RpibouQLJqm2mA` |
| List Account Web Hooks | GET | `/api/v1/account/web_hooks` | `conn_mod_def::GLK2_RyLu-A::3pL5NS07RmSJXAh9Kwgttw` |
| Create Account Web Hook | POST | `/api/v1/account/web_hooks` | `conn_mod_def::GLK2-7s2xtg::JW2RmtMdRIWgoNFDZFA2GQ` |
| Delete Account Web Hook | DELETE | `/api/v1/account/web_hooks/{{id}}` | `conn_mod_def::GLK2_PJ1p9A::tjwsGNBeQM-VtFyFPpovqw` |
| Disable Account Web Hook | PUT | `/api/v1/account/web_hooks/{{id}}/disable` | `conn_mod_def::GLK2_PctSCg::CUNSxrzNSraqNu0PyQPtcg` |
| Enable Account Web Hook | PUT | `/api/v1/account/web_hooks/{{id}}/enable` | `conn_mod_def::GLK2_PKjfjA::nBmJH0rJQwGmKzMoxGx5Eg` |
| Update Account Web Hook #1 | PUT | `/api/v1/account/web_hooks/{{id}}` | `conn_mod_def::GLK2_gVWbhA::AxJHN5dPTZ6J8yX1zgmi4g` |
| Update Account Web Hook #2 | PATCH | `/api/v1/account/web_hooks/{{id}}` | `conn_mod_def::GLK2_gVf4_A::WaF9jB53T0q5AMlHWJxbyg` |

### Companies

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Company | GET | `/api/v1/companies/{{id}}` | `conn_mod_def::GLK3AeGuooA::lyS7N0J-SXST9kg8wn75Rw` |
| List Companies | GET | `/api/v1/companies` | `conn_mod_def::GLK3Af7yeKg::0R6xZC0JQpOpOOovAM7DKQ` |
| Archive Company | PUT | `/api/v1/companies/{{id}}/archive` | `conn_mod_def::GLK3AdPiFng::8gt4PDh-T5CFdDID687FEg` |
| Create Company | POST | `/api/v1/companies` | `conn_mod_def::GLK3AgfKpZA::4JsK7LEuSNyYF_lEdyCF_w` |
| Delete Company | DELETE | `/api/v1/companies/{{id}}` | `conn_mod_def::GLK3Ac906Lg::vhNf7Lk2Rua5yXKnq9_78g` |
| Unarchive Company | PUT | `/api/v1/companies/{{id}}/unarchive` | `conn_mod_def::GLK3ApWl1RA::Y5CysI0LT9i8ppQtyef4EQ` |
| Update Company #1 | PUT | `/api/v1/companies/{{id}}` | `conn_mod_def::GLK3Aq05L9g::3Sw8LsvlQkmZMnf512enIQ` |
| Update Company #2 | PATCH | `/api/v1/companies/{{id}}` | `conn_mod_def::GLK3Aqn_t4g::ZKVbplaTQ7KVEBWC5WWA8Q` |

### ProjectExpenses

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Project Expense | GET | `/api/v1/projects/{{projectId}}/expenses/{{id}}` | `conn_mod_def::GLK3BlY57bg::RG03nSZdRa2tFy6zQGm3yg` |
| List Project Expenses | GET | `/api/v1/projects/{{projectId}}/expenses` | `conn_mod_def::GLK3BqCpGrg::jp2YfhZDSee0jfdLt2qsoA` |
| Create Project Expense | POST | `/api/v1/projects/{{projectId}}/expenses` | `conn_mod_def::GLK3BdH3cEg::3Wz8-ii4RCey1SagXygGFQ` |
| Create Project Expenses In Bulk | POST | `/api/v1/projects/{{projectId}}/expenses/bulk` | `conn_mod_def::GLK3BcyCWAg::t4dThzcKRsG-BXDvhm2HVg` |
| Delete Project Expense | DELETE | `/api/v1/projects/{{projectId}}/expenses/{{id}}` | `conn_mod_def::GLK3Bcp288A::TR4CJ2xLTnCHyRswJFHqxg` |
| Disregard Project Expenses | POST | `/api/v1/projects/{{projectId}}/expenses/disregard` | `conn_mod_def::GLK3BmDZPkA::vQHmrMMnSCqkVuVHhV2tFg` |
| Update Project Expense #1 | PUT | `/api/v1/projects/{{projectId}}/expenses/{{id}}` | `conn_mod_def::GLK3BmIbzHg::75ml3YOgTkaIr1BeDi7Fwg` |
| Update Project Expense #2 | PATCH | `/api/v1/projects/{{projectId}}/expenses/{{id}}` | `conn_mod_def::GLK3BzY_9xg::tL86qy-oSbGX7CY5HOPZiQ` |

### Users

| Action | Method | Path | Action id |
|---|---|---|---|
| Get User | GET | `/api/v1/users/{{id}}` | `conn_mod_def::GLK3I1sZBUA::RZir-lvIRoW65fa-sQALoA` |
| List Users | GET | `/api/v1/users` | `conn_mod_def::GLK3JAay6Ag::DE-e2jWBR0qPGqEfOFkWgw` |
| Create User | POST | `/api/v1/users` | `conn_mod_def::GLK3I1rF5AA::0nDjRSZHSdGzB53jk-neyg` |
| Delete User | DELETE | `/api/v1/users/{{id}}` | `conn_mod_def::GLK3I10BJjA::Jlm4Y6cIS_ujrzI92_l9AQ` |
| Update User #1 | PUT | `/api/v1/users/{{id}}` | `conn_mod_def::GLK3I_YYhmA::omjY_L_ORm2cKQrohQAlCA` |
| Update User #2 | PATCH | `/api/v1/users/{{id}}` | `conn_mod_def::GLK3I_RPxLA::vb7GFa04SU-bBMzxDEIn_g` |
| Update User Employment #1 | PUT | `/api/v1/users/employments/{{id}}` | `conn_mod_def::GLK3IMLZF7g::4FJwf8cGSDWfj27WM0yznQ` |
| Update User Employment #2 | PATCH | `/api/v1/users/employments/{{id}}` | `conn_mod_def::GLK3IMD_nMg::WLzpF_z5Ql2KbzgWICexQw` |

### UserPresences

| Action | Method | Path | Action id |
|---|---|---|---|
| Get User Presence | GET | `/api/v1/users/presences/{{id}}` | `conn_mod_def::GLK3Iqqe9zg::IoPUZmrORGismpWeDPFF3Q` |
| List User Presences | GET | `/api/v1/users/presences` | `conn_mod_def::GLK3IubrdWg::vwG-NikVRTa6WzXgTZtWDg` |
| Create User Presence | POST | `/api/v1/users/presences` | `conn_mod_def::GLK3IWDl6Hg::FYrvjfmDT9WBfkfnkXgR4A` |
| Delete User Presence | DELETE | `/api/v1/users/presences/{{id}}` | `conn_mod_def::GLK3IjcL7fg::t8kXV4yLQn6mhZ-XWb3xMg` |
| Touch User Presence | POST | `/api/v1/users/presences/touch` | `conn_mod_def::GLK3ItUm0Eg::JJ1tdnmrToqs5nZkQ_sAcA` |
| Update User Presence #1 | PUT | `/api/v1/users/presences/{{id}}` | `conn_mod_def::GLK3IrgB-6A::NMKHzXt8QtGNSGkfi7VPAQ` |
| Update User Presence #2 | PATCH | `/api/v1/users/presences/{{id}}` | `conn_mod_def::GLK3Ir1-oXg::SZp0IO4WTQahLlXlRpiziw` |

### Comments

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Comment | GET | `/api/v1/comments/{{id}}` | `conn_mod_def::GLK3AR7F87g::IyoRfJaNTGqtwNFj3kHbkA` |
| List Comments | GET | `/api/v1/comments` | `conn_mod_def::GLK3ASpfIRg::icqxqRFKQSiolN_DA8oWkQ` |
| Create Comment | POST | `/api/v1/comments` | `conn_mod_def::GLK3AHzB8Fg::hR5CyjpVRDCV9bKclf_-jw` |
| Create Comments In Bulk | POST | `/api/v1/comments/bulk` | `conn_mod_def::GLK3AJJUYnA::SNqUkvHARR6hIfZQYD35dg` |
| Delete Comment | DELETE | `/api/v1/comments/{{id}}` | `conn_mod_def::GLK3ARzvJGA::2fKz1bT5RmKQX_BacAw8Lg` |
| Update Comment #1 | PUT | `/api/v1/comments/{{id}}` | `conn_mod_def::GLK3ARy-_EA::3S15wdxRRvmNEuBUZdOEQA` |
| Update Comment #2 | PATCH | `/api/v1/comments/{{id}}` | `conn_mod_def::GLK3ARy-1TA::FstyItMBRty1mzEdzjpvXw` |

### InvoicePayments

| Action | Method | Path | Action id |
|---|---|---|---|
| Get Invoice Payment | GET | `/api/v1/invoices/payments/{{id}}` | `conn_mod_def::GLK3CGpU9Ag::hB-ozpS5REymPWmjzPADfA` |
| List Invoice Payments | GET | `/api/v1/invoices/payments` | `conn_mod_def::GLK3CJUBd9A::3lE5yll7RD2ZZLJwtikgMw` |
| Create Invoice Payment | POST | `/api/v1/invoices/payments` | `conn_mod_def::GLK3B9jqAmA::WYyHjMOhSKKs9I_YyhSEXA` |

4 more InvoicePayments actions are available through search.

This lists 90 of 288 actions. For anything not here, call `search_one_platform_actions` with platform `moco`. The full catalog is at https://www.withone.ai/knowledge/moco.

## When a call fails

The error comes from MOCO, not from One. A 400 or 422 means your parameters do not match the schema, so re-read the knowledge and fix the field. A 401 or 403 means the connection needs re-authorizing, which no retry will fix. A 404 means the id is not on this account. A 429 means slow down. Never retry a write more than once: the first attempt may have landed.

Full catalog: https://www.withone.ai/knowledge/moco

Integration knowledge by One (withone.ai), licensed under [One-Knowledge-1.0](https://www.withone.ai/licenses/knowledge). Attribution must be preserved in derivative works.

