Projects
Tools for projects in Aprimo Productivity Management — searching and reading projects, creating and updating them, and managing project role membership.
This page covers 17 tools, 16 of them in the default tool list, and 4 destructive.
- Status — In the default tool list means the tool is one of the ~200 Aprimo advertises to every agent out of the box, so the agent discovers and calls it on its own. Available on request means the tool is registered and fully callable, but sits outside that default list — call it by name, or ask Aprimo to extend the list your tenant is served.
- Both statuses work identically when called. Status affects discovery, not capability or authorization.
- Visibility is not authorization. Every tool call executes as the authenticated user, and any tool can return an authorization error if that user lacks rights to the record, task, or file. See the MCP Tool Permission Map.
- Destructive tools are labelled as such. They delete or irreversibly overwrite data, and will not act unless the call sets both
confirmedandconfirmedDestructivetotrue. - Activity and Project labels vary by tenant. Where this page says Activity or Project, your tenant's own configured terminology is substituted at runtime.
Aprimo's MCP Server exposes far more tools than most MCP clients handle well — many degrade or truncate their tool list well below the full catalogue. Rather than let a client truncate arbitrarily, Aprimo advertises a curated set of roughly 200 tools covering the tasks customers most commonly automate. Everything outside that set remains fully supported and callable by name; it simply isn't offered up front. If your integration leans on a tool that is available on request, talk to your Aprimo Customer Success Manager about extending the advertised list for your tenant.
Tools at a Glance
| Tool | Status | What it does |
|---|---|---|
cancel_project | Default | Destructive. Cancels a Project in Aprimo Marketing Operations. |
close_project | Default | Destructive. Closes a Project in Aprimo Marketing Operations. |
create_project | Default | Creates a new Project in Aprimo Marketing Operations. |
get_project | Default | Returns a single Project by its integer ID from Aprimo Marketing Operations. |
get_project_dam_collection | On request | Returns the DAM collections linked to a Project, by the project's integer ID, in Aprimo Marketing Operations. |
get_project_role_members | Default | Returns the members of a project role, by project ID and project-role ID, in Aprimo Marketing Operations. |
get_project_role_memberships | Default | Returns all role memberships for a project, by the project's integer ID, in Aprimo Marketing Operations. |
get_projects_for_activity | Default | Lists the Projects that belong to an Activity (marketing campaign), by the activity's integer ID, in Aprimo Marketing Operations. |
list_projects | Default | Lists Projects in Aprimo Marketing Operations, paged. |
list_projects_display | Default | Returns a paged, sortable display list of Projects for list/grid presentation in Aprimo Marketing Operations, optionally filtered by project statuses, title, and activity ID. |
list_projects_for_attachment | Default | Lists the Projects that an attachment (by integer ID) is associated with, in Aprimo Marketing Operations, paged and sortable. |
pause_project | Default | Destructive. Pauses a Project in Aprimo Marketing Operations. |
save_project_roles | Default | Adds a role to a project, by the project's integer ID, in Aprimo Marketing Operations. |
search_projects | Default | Searches Projects in Aprimo Marketing Operations. |
start_project | Default | Destructive. Transitions a Project to started in Aprimo Marketing Operations. |
update_project | Default | Updates an existing Project by its integer ID in Aprimo Marketing Operations. |
update_project_role_memberships | Default | Replaces the role memberships for a project, by the project's integer ID, in Aprimo Marketing Operations. |
cancel_project
In the default tool list · Destructive
Cancels a Project in Aprimo Marketing Operations. This is a state change that terminates the project's workflow. Requires both confirmed=true and confirmedDestructive=true, after explicitly confirming the exact Project with the user.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID to cancel. |
confirmed | boolean | No | Must be true to proceed. Omit (or false) to get a confirmation gate error. |
confirmedDestructive | boolean | No | Must also be true (in addition to confirmed) — cancelling a project changes its state. Set only after stating the exact project to the user and getting explicit go-ahead. |
Returns:
| Field | Type | Description |
|---|---|---|
projectId | integer | |
action | string (optional) | The state-change action performed: "start", "cancel", "pause", or "close". |
succeeded | boolean | |
deepLink | string (optional) | UI deep link to the affected project. |
This tool deletes or irreversibly overwrites data in the live tenant; the change cannot be rolled back through the API. It will not act unless the call sets both confirmed and confirmedDestructive to true.
close_project
In the default tool list · Destructive
Closes a Project in Aprimo Marketing Operations. This is a state change that completes the project's workflow. Requires both confirmed=true and confirmedDestructive=true, after explicitly confirming the exact Project with the user.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID to close. |
confirmed | boolean | No | Must be true to proceed. Omit (or false) to get a confirmation gate error. |
confirmedDestructive | boolean | No | Must also be true (in addition to confirmed) — closing a project changes its state. Set only after stating the exact project to the user and getting explicit go-ahead. |
Returns:
| Field | Type | Description |
|---|---|---|
projectId | integer | |
action | string (optional) | The state-change action performed: "start", "cancel", "pause", or "close". |
succeeded | boolean | |
deepLink | string (optional) | UI deep link to the affected project. |
This tool deletes or irreversibly overwrites data in the live tenant; the change cannot be rolled back through the API. It will not act unless the call sets both confirmed and confirmedDestructive to true.
create_project
In the default tool list
Creates a new Project in Aprimo Marketing Operations. Requires confirmed=true after showing the user the exact payload (title, dates, linked activity, project manager, etc.). Returns the created Project with resolved labels and deep links.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
body | string | Yes | JSON object with the new project's fields (PM wire names, e.g. {"title":"Hero Image Production","activityId":13801,"projectManager":1042}). Pass PM's wire field names; the server sends the object as-is. |
confirmed | boolean | No | Must be true to proceed. Omit (or false) to get a confirmation gate error, then call again with confirmed=true after the user has explicitly approved the exact payload. |
Returns:
| Field | Type | Description |
|---|---|---|
projectId | integer | |
title | string (optional) | |
projectStatusId | integer (optional) | |
projectStatusLabel | string (optional) | |
description | string (optional) | |
beginDate | string (optional) | |
endDate | string (optional) | |
projectManagerId | integer (optional) | |
projectManagerName | string (optional) | |
activityId | integer | |
activityName | string (optional) | |
activityDeepLink | string (optional) | |
deepLink | string (optional) | |
workflowId | integer (optional) | PM's workflow id for this project. Nullable per the schema. |
projectTypeId | integer (optional) | PM's project-type id. Nullable per the schema. |
modifiedDate | string (optional) | The project's last-modified timestamp (raw ISO-8601, not locale-formatted -- distinct from /, which route through ). |
modifiedUserId | integer (optional) | The user id who last modified the project. |
timeZoneId | integer (optional) | PM's time-zone id for the project's dates. |
projectScalingTypeId | integer (optional) | PM's project-scaling-type id. |
associatedProjectId | integer (optional) | The id of another project this one is associated with, if any. |
changeOrder | boolean (optional) | Whether this project represents a change order. |
projectedEndDate | string (optional) | Projected end date (distinct from the committed ). |
baselineEndDate | string (optional) | Baseline end date snapshot. |
brandName | string (optional) | The brand name associated with the project, when set. |
get_project
In the default tool list
Returns a single Project by its integer ID from Aprimo Marketing Operations. If this tenant renamed the Project object (e.g. 'Workstream', 'Effort', 'Track'), this is still the right tool. Use for Projects — not Activities/campaigns (use get_activity for those). Returns only the base Project record itself — not any Project sub-resource (DAM collection link, role members/memberships, tasks, attachments, chat access, etc.), each of which has its own get_project_* tool. Resolves status, project manager, and the linked Activity to human-readable labels/names and includes clickable deep links.
Response format: the markdown block is pre-rendered with the tenant's own terminology, locale-formatted dates, and resolved labels, and is intended to be displayed verbatim, including every (id: N) suffix and the deep-link heading.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID. |
Returns:
| Field | Type | Description |
|---|---|---|
projectId | integer | |
title | string (optional) | |
projectStatusId | integer (optional) | |
projectStatusLabel | string (optional) | |
description | string (optional) | |
beginDate | string (optional) | |
endDate | string (optional) | |
projectManagerId | integer (optional) | |
projectManagerName | string (optional) | |
activityId | integer | |
activityName | string (optional) | |
activityDeepLink | string (optional) | |
deepLink | string (optional) | |
workflowId | integer (optional) | PM's workflow id for this project. Nullable per the schema. |
projectTypeId | integer (optional) | PM's project-type id. Nullable per the schema. |
modifiedDate | string (optional) | The project's last-modified timestamp (raw ISO-8601, not locale-formatted -- distinct from /, which route through ). |
modifiedUserId | integer (optional) | The user id who last modified the project. |
timeZoneId | integer (optional) | PM's time-zone id for the project's dates. |
projectScalingTypeId | integer (optional) | PM's project-scaling-type id. |
associatedProjectId | integer (optional) | The id of another project this one is associated with, if any. |
changeOrder | boolean (optional) | Whether this project represents a change order. |
projectedEndDate | string (optional) | Projected end date (distinct from the committed ). |
baselineEndDate | string (optional) | Baseline end date snapshot. |
brandName | string (optional) | The brand name associated with the project, when set. |
get_project_dam_collection
Available on request
Returns the DAM collections linked to a Project, by the project's integer ID, in Aprimo Marketing Operations. Each entry carries the DAM collection's GUID id and name.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID. |
Returns:
| Field | Type | Description |
|---|---|---|
projectId | integer | |
count | integer | |
items | array of ProjectDamCollectionItem | |
items[].projectId | integer | |
items[].collectionId | string (optional) | The DAM collection's GUID id. |
items[].collectionName | string (optional) |
get_project_role_members
In the default tool list
Returns the members of a project role, by project ID and project-role ID, in Aprimo Marketing Operations. Optionally includes each member's first/last name inline.
Response format: the response carries pre-rendered markdown blocks intended to be displayed verbatim.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID. |
projectRoleId | string | Yes | The project role's integer ID. |
includeUserName | boolean | No | When true, include each member's first/last name inline. Default false. |
Returns:
| Field | Type | Description |
|---|---|---|
projectId | integer | |
projectRoleId | integer | |
count | integer | |
items | array of ProjectRoleMemberItemProjection | |
items[].projectRoleMemberId | integer (optional) | |
items[].projectRoleId | integer | |
items[].userId | integer (optional) | |
items[].firstName | string (optional) | |
items[].lastName | string (optional) | |
items[].projectRole | ProjectRoleInfoProjection (optional) | |
items[].projectRole.projectRoleId | integer | |
items[].projectRole.projectId | integer | |
items[].projectRole.userRoleId | integer |
get_project_role_memberships
In the default tool list
Returns all role memberships for a project, by the project's integer ID, in Aprimo Marketing Operations. Resolves each role member's user name.
Response format: the response carries a pre-rendered markdown block intended to be displayed verbatim.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID. |
Returns:
| Field | Type | Description |
|---|---|---|
activityId | integer (optional) | |
projectId | integer | |
projectName | string (optional) | |
roles | array of ProjectRoleUserItemProjection | |
roles[].roleId | integer (optional) | |
roles[].userId | integer (optional) | |
roles[].userName | string (optional) | |
roles[].userTokenId | integer (optional) | |
roles[].userToken | string (optional) | |
roles[].projectRoleId | integer (optional) |
get_projects_for_activity
In the default tool list
Lists the Projects that belong to an Activity (marketing campaign), by the activity's integer ID, in Aprimo Marketing Operations. Returns totals and human-readable labels for status, project manager, and the linked Activity.
Response format: the response carries pre-rendered markdown blocks intended to be displayed verbatim, including (id: N) suffixes and deep-link headings.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
activityId | string | Yes | The parent activity's integer ID. |
limit | integer | No | Maximum number of results to return (1–50, default 20). |
offset | integer | No | Number of results to skip for pagination (default 0). |
sortField | string | No | Optional field name to sort by (e.g. 'ModifiedDate', 'Title'). Omit for default ordering. |
sortAscending | boolean | No | Sort direction. true = ascending (default), false = descending. |
Returns:
| Field | Type | Description |
|---|---|---|
collectionName | string (optional) | Resource-name key the wire's _embedded used (e.g. "Activity", "Project"). Informational; may be null when the response isn't HAL-shaped. |
totalRecords | integer | Total record count across all pages — from the wire's _total. |
count | integer | Number of items returned in this response (i.e. Items.Count; precomputed for the llm). |
offset | integer | The offset that was used to produce this page (echoes the caller's offset, clamped to ≥0). |
hasMore | boolean | True when there are more results past this page. Tools should prompt the llm to ask the user about fetching the next page. |
nextOffset | integer (optional) | Offset to pass on the next request to continue. Null when is false. |
items | array of ProjectProjection | The items returned in this response. |
items[].projectId | integer | |
items[].title | string (optional) | |
items[].projectStatusId | integer (optional) | |
items[].projectStatusLabel | string (optional) | |
items[].description | string (optional) | |
items[].beginDate | string (optional) | |
items[].endDate | string (optional) | |
items[].projectManagerId | integer (optional) | |
items[].projectManagerName | string (optional) | |
items[].activityId | integer | |
items[].activityName | string (optional) | |
items[].activityDeepLink | string (optional) | |
items[].deepLink | string (optional) | |
items[].workflowId | integer (optional) | PM's workflow id for this project. Nullable per the schema. |
items[].projectTypeId | integer (optional) | PM's project-type id. Nullable per the schema. |
items[].modifiedDate | string (optional) | The project's last-modified timestamp (raw ISO-8601, not locale-formatted -- distinct from /, which route through ). |
items[].modifiedUserId | integer (optional) | The user id who last modified the project. |
items[].timeZoneId | integer (optional) | PM's time-zone id for the project's dates. |
items[].projectScalingTypeId | integer (optional) | PM's project-scaling-type id. |
items[].associatedProjectId | integer (optional) | The id of another project this one is associated with, if any. |
items[].changeOrder | boolean (optional) | Whether this project represents a change order. |
items[].projectedEndDate | string (optional) | Projected end date (distinct from the committed ). |
items[].baselineEndDate | string (optional) | Baseline end date snapshot. |
items[].brandName | string (optional) | The brand name associated with the project, when set. |
list_projects
In the default tool list
Lists Projects in Aprimo Marketing Operations, paged. Optionally narrow by title substring and/or status. Use search_projects when you need richer filtering (project manager, linked activity, extended attributes, the query DSL); use this to browse. Returns totals and human-readable labels for status, project manager, and the linked Activity.
Response format: the response carries pre-rendered markdown blocks intended to be displayed verbatim, including (id: N) suffixes and deep-link headings.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Maximum number of results to return (1–50, default 20). |
offset | integer | No | Number of results to skip for pagination (default 0). |
sortField | string | No | Optional field name to sort by (e.g. 'ModifiedDate', 'Title'). Omit for default ordering. |
sortAscending | boolean | No | Sort direction. true = ascending (default), false = descending. |
titleFilter | string | No | Optional case-insensitive title substring filter. |
projectStatusLabel | string | No | Optional status filter (label, case-insensitive, e.g. 'Active', 'Closed'). Resolved against the PM ProjectStatus lookup list; returns an error if the label doesn't match any known status. |
Returns:
| Field | Type | Description |
|---|---|---|
collectionName | string (optional) | Resource-name key the wire's _embedded used (e.g. "Activity", "Project"). Informational; may be null when the response isn't HAL-shaped. |
totalRecords | integer | Total record count across all pages — from the wire's _total. |
count | integer | Number of items returned in this response (i.e. Items.Count; precomputed for the llm). |
offset | integer | The offset that was used to produce this page (echoes the caller's offset, clamped to ≥0). |
hasMore | boolean | True when there are more results past this page. Tools should prompt the llm to ask the user about fetching the next page. |
nextOffset | integer (optional) | Offset to pass on the next request to continue. Null when is false. |
items | array of ProjectProjection | The items returned in this response. |
items[].projectId | integer | |
items[].title | string (optional) | |
items[].projectStatusId | integer (optional) | |
items[].projectStatusLabel | string (optional) | |
items[].description | string (optional) | |
items[].beginDate | string (optional) | |
items[].endDate | string (optional) | |
items[].projectManagerId | integer (optional) | |
items[].projectManagerName | string (optional) | |
items[].activityId | integer | |
items[].activityName | string (optional) | |
items[].activityDeepLink | string (optional) | |
items[].deepLink | string (optional) | |
items[].workflowId | integer (optional) | PM's workflow id for this project. Nullable per the schema. |
items[].projectTypeId | integer (optional) | PM's project-type id. Nullable per the schema. |
items[].modifiedDate | string (optional) | The project's last-modified timestamp (raw ISO-8601, not locale-formatted -- distinct from /, which route through ). |
items[].modifiedUserId | integer (optional) | The user id who last modified the project. |
items[].timeZoneId | integer (optional) | PM's time-zone id for the project's dates. |
items[].projectScalingTypeId | integer (optional) | PM's project-scaling-type id. |
items[].associatedProjectId | integer (optional) | The id of another project this one is associated with, if any. |
items[].changeOrder | boolean (optional) | Whether this project represents a change order. |
items[].projectedEndDate | string (optional) | Projected end date (distinct from the committed ). |
items[].baselineEndDate | string (optional) | Baseline end date snapshot. |
items[].brandName | string (optional) | The brand name associated with the project, when set. |
list_projects_display
In the default tool list
Returns a paged, sortable display list of Projects for list/grid presentation in Aprimo Marketing Operations, optionally filtered by project statuses, title, and activity ID.
Response format: the response carries pre-rendered markdown blocks intended to be displayed verbatim.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Maximum number of results to return (1–50, default 20). |
offset | integer | No | Number of results to skip for pagination (default 0). |
sortField | string | No | Optional field name to sort by. Omit for default ordering. |
sortAscending | boolean | No | Sort direction. true = ascending (default), false = descending. |
titleFilter | string | No | Optional case-insensitive title substring filter. |
projectStatusLabel | string | No | Optional status filter (label, case-insensitive, e.g. 'Active', 'Closed'). Resolved against the PM ProjectStatus lookup list; returns an error if the label doesn't match any known status. |
activityId | string | No | Optional linked activity's integer ID to narrow the display list to. |
Returns:
| Field | Type | Description |
|---|---|---|
collectionName | string (optional) | Resource-name key the wire's _embedded used (e.g. "Activity", "Project"). Informational; may be null when the response isn't HAL-shaped. |
totalRecords | integer | Total record count across all pages — from the wire's _total. |
count | integer | Number of items returned in this response (i.e. Items.Count; precomputed for the llm). |
offset | integer | The offset that was used to produce this page (echoes the caller's offset, clamped to ≥0). |
hasMore | boolean | True when there are more results past this page. Tools should prompt the llm to ask the user about fetching the next page. |
nextOffset | integer (optional) | Offset to pass on the next request to continue. Null when is false. |
items | array of ProjectSummaryProjection | The items returned in this response. |
items[].id | string (optional) | |
items[].title | string (optional) | |
items[].raw | object (optional) | The complete wire object, verbatim, for full fidelity beyond the defensively-extracted fields above. |
list_projects_for_attachment
In the default tool list
Lists the Projects that an attachment (by integer ID) is associated with, in Aprimo Marketing Operations, paged and sortable.
Response format: the response carries pre-rendered markdown blocks intended to be displayed verbatim.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
attachmentId | string | Yes | The attachment's integer ID. |
limit | integer | No | Maximum number of results to return (1–50, default 20). |
offset | integer | No | Number of results to skip for pagination (default 0). |
sortField | string | No | Optional field name to sort by. Omit for default ordering. |
sortAscending | boolean | No | Sort direction. true = ascending (default), false = descending. |
Returns:
| Field | Type | Description |
|---|---|---|
collectionName | string (optional) | Resource-name key the wire's _embedded used (e.g. "Activity", "Project"). Informational; may be null when the response isn't HAL-shaped. |
totalRecords | integer | Total record count across all pages — from the wire's _total. |
count | integer | Number of items returned in this response (i.e. Items.Count; precomputed for the llm). |
offset | integer | The offset that was used to produce this page (echoes the caller's offset, clamped to ≥0). |
hasMore | boolean | True when there are more results past this page. Tools should prompt the llm to ask the user about fetching the next page. |
nextOffset | integer (optional) | Offset to pass on the next request to continue. Null when is false. |
items | array of ProjectSummaryProjection | The items returned in this response. |
items[].id | string (optional) | |
items[].title | string (optional) | |
items[].raw | object (optional) | The complete wire object, verbatim, for full fidelity beyond the defensively-extracted fields above. |
pause_project
In the default tool list · Destructive
Pauses a Project in Aprimo Marketing Operations. This is a state change that halts the project's workflow. Requires both confirmed=true and confirmedDestructive=true, after explicitly confirming the exact Project with the user.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID to pause. |
confirmed | boolean | No | Must be true to proceed. Omit (or false) to get a confirmation gate error. |
confirmedDestructive | boolean | No | Must also be true (in addition to confirmed) — pausing a project changes its state. Set only after stating the exact project to the user and getting explicit go-ahead. |
Returns:
| Field | Type | Description |
|---|---|---|
projectId | integer | |
action | string (optional) | The state-change action performed: "start", "cancel", "pause", or "close". |
succeeded | boolean | |
deepLink | string (optional) | UI deep link to the affected project. |
This tool deletes or irreversibly overwrites data in the live tenant; the change cannot be rolled back through the API. It will not act unless the call sets both confirmed and confirmedDestructive to true.
save_project_roles
In the default tool list
Adds a role to a project, by the project's integer ID, in Aprimo Marketing Operations. Requires confirmed=true after showing the user the exact payload. Returns the save result (new project role id, or validation errors).
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID. |
body | string | Yes | JSON object with the role to add (PM wire names, e.g. userRoleId). projectId is populated automatically from the projectId parameter above -- do not include it. |
confirmed | boolean | No | Must be true to proceed. Omit (or false) to get a confirmation gate error, then call again with confirmed=true after the user has explicitly approved the payload. |
Returns:
| Field | Type | Description |
|---|---|---|
result | integer (optional) | |
isValid | boolean | |
validationErrors | array of string (optional) | |
validationMessages | array of ValidationMessageProjection (optional) | |
validationMessages[].formatResourceId | string (optional) | |
validationMessages[].argumentResourceIds | array of string (optional) | |
validationMessages[].formattedMessage | string (optional) |
search_projects
In the default tool list
Searches Projects in Aprimo Marketing Operations. If this tenant has renamed the Project object (e.g. to 'Workstream', 'Effort', 'Track'), users will mention it by this tenant's term — use this tool whenever the user means Projects, regardless of the word they say. Returns a paged list with totals and human-readable labels for status, Project manager name, and the linked Activity's name. Each Project carries the linked Activity's id, name, and deep link. Use this tool for Projects — not for Activities/campaigns (use search_activities for those).
Response format. Each item comes back as a markdown block pre-rendered server-side using the tenant's own terminology: labels reflect tenant configuration, dates are locale-formatted, lookup values are resolved to display strings, and the heading is a clickable deep link. The block is intended to be displayed verbatim rather than re-rendered from the structured payload. If you do re-render it, preserve the tenant-localized labels, the (id: N) suffixes (which enable follow-up filters), the date formatting, and the deep-link heading.
Filtering. Prefer the name-keyed filter parameters (projectStatusLabel, projectManagerName) over composing the query DSL. For extended attributes — tenant-configured custom fields beyond the standard set — use attributeFilters to match a specific value, and attributesPresent to match any value or no value. Extended attributes cannot be addressed through query; pass the display name as written.
Query DSL. query takes a structured operator tree using PascalCase FieldName/FieldValue. By partial title: query='{"contains":{"FieldName":"Title","FieldValue":"hero"}}'. By id: query='{"equals":{"FieldName":"ProjectId","FieldValue":67890}}'. To browse without a filter use list_projects instead — an empty query='{}' is rejected.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | JSON-encoded search body using PM's operator-tree DSL — not a flat {field: value} object. The body must have exactly one top-level operator. Operators (all lowercase, no separators): 'equals', 'contains', 'lessthan', 'lessthanorequalto', 'greaterthan', 'greaterthanorequalto', 'isnull', 'isnotnull', 'and', 'or', 'not'. Leaf operators take {FieldName, FieldValue} (pascal case) where FieldName is PM's wire field name ('ProjectId', 'Title', 'ActivityId', 'ProjectManager', 'ProjectStatus', 'EndDate', etc.) and FieldValue is a native JSON value matching the field's type (integer for IDs, ISO 8601 string for dates, string for text). Composite 'and'/'or' take an array of operations; 'not' takes a single operation object. PM rejects an empty '{}' (throws 'Couldn't find any operator') — it is not a match-all query; use list_projects to browse without a filter. For status/project-manager filtering, prefer the name-keyed parameters below. Examples: by id '{"equals":{"FieldName":"ProjectId","FieldValue":67890}}'; by title (partial) '{"contains":{"FieldName":"Title","FieldValue":"hero"}}'; by end date '{"lessthan":{"FieldName":"EndDate","FieldValue":"2026-07-01"}}'; by linked activity '{"equals":{"FieldName":"ActivityId","FieldValue":13801}}'. |
limit | integer | No | Maximum number of results to return (1–50, default 20). |
offset | integer | No | Number of results to skip for pagination (default 0). |
sortField | string | No | Optional field name to sort by (e.g. 'ModifiedDate', 'Title'). Omit for default ordering. |
sortAscending | boolean | No | Sort direction. true = ascending (default), false = descending. |
projectStatusLabel | string | No | Filter to projects with this status (label, case-insensitive, e.g. 'Active', 'Closed'). Resolved against the PM ProjectStatus lookup list. Returns an error if the label doesn't match any known status. Combined with query and other filters via and. |
projectManagerName | string | No | Filter to projects whose project manager's first or last name matches this string (case-insensitive substring). Examples: 'Alice', 'Adams', 'alice ad'. If multiple users match, all are included (or). If no users match, returns an empty result set with a message — not an error. |
attributeFilters | object (map of string) | No | Filter by extended attributes with a specific value. Tenant-configured custom fields beyond the standard set. Pass a dictionary keyed by the attribute's display name exactly as the user/admin sees it, with the desired value as a string. For lookup-type EAs (picklists), pass the option's display label — the server translates to the underlying itemId. For text/number/date EAs, pass the value as a string — the server passes it through. Returns BadRequest with the valid attribute set if a key doesn't match any EA. Combined with query and other filters via and. |
attributesPresent | object (map of boolean) | No | Filter by extended attribute presence — for natural-language patterns like 'projects with any value for Region' or 'projects missing a Phase Gate tag'. Pass a dictionary keyed by the attribute's display name, with a boolean value: True = the EA has any value (isnotnull); False = the EA has no value (isnull). Use this when the user does not specify a particular value to match. |
Returns:
| Field | Type | Description |
|---|---|---|
collectionName | string (optional) | Resource-name key the wire's _embedded used (e.g. "Activity", "Project"). Informational; may be null when the response isn't HAL-shaped. |
totalRecords | integer | Total record count across all pages — from the wire's _total. |
count | integer | Number of items returned in this response (i.e. Items.Count; precomputed for the llm). |
offset | integer | The offset that was used to produce this page (echoes the caller's offset, clamped to ≥0). |
hasMore | boolean | True when there are more results past this page. Tools should prompt the llm to ask the user about fetching the next page. |
nextOffset | integer (optional) | Offset to pass on the next request to continue. Null when is false. |
items | array of ProjectProjection | The items returned in this response. |
items[].projectId | integer | |
items[].title | string (optional) | |
items[].projectStatusId | integer (optional) | |
items[].projectStatusLabel | string (optional) | |
items[].description | string (optional) | |
items[].beginDate | string (optional) | |
items[].endDate | string (optional) | |
items[].projectManagerId | integer (optional) | |
items[].projectManagerName | string (optional) | |
items[].activityId | integer | |
items[].activityName | string (optional) | |
items[].activityDeepLink | string (optional) | |
items[].deepLink | string (optional) | |
items[].workflowId | integer (optional) | PM's workflow id for this project. Nullable per the schema. |
items[].projectTypeId | integer (optional) | PM's project-type id. Nullable per the schema. |
items[].modifiedDate | string (optional) | The project's last-modified timestamp (raw ISO-8601, not locale-formatted -- distinct from /, which route through ). |
items[].modifiedUserId | integer (optional) | The user id who last modified the project. |
items[].timeZoneId | integer (optional) | PM's time-zone id for the project's dates. |
items[].projectScalingTypeId | integer (optional) | PM's project-scaling-type id. |
items[].associatedProjectId | integer (optional) | The id of another project this one is associated with, if any. |
items[].changeOrder | boolean (optional) | Whether this project represents a change order. |
items[].projectedEndDate | string (optional) | Projected end date (distinct from the committed ). |
items[].baselineEndDate | string (optional) | Baseline end date snapshot. |
items[].brandName | string (optional) | The brand name associated with the project, when set. |
start_project
In the default tool list · Destructive
Transitions a Project to started in Aprimo Marketing Operations. This is a state change that kicks off the project's workflow. Requires both confirmed=true and confirmedDestructive=true, after explicitly confirming the exact Project with the user.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID to start. |
confirmed | boolean | No | Must be true to proceed. Omit (or false) to get a confirmation gate error. |
confirmedDestructive | boolean | No | Must also be true (in addition to confirmed) — this changes the project's state. Set only after stating the exact project to the user and getting explicit go-ahead. |
Returns:
| Field | Type | Description |
|---|---|---|
projectId | integer | |
action | string (optional) | The state-change action performed: "start", "cancel", "pause", or "close". |
succeeded | boolean | |
deepLink | string (optional) | UI deep link to the affected project. |
This tool deletes or irreversibly overwrites data in the live tenant; the change cannot be rolled back through the API. It will not act unless the call sets both confirmed and confirmedDestructive to true.
update_project
In the default tool list
Updates an existing Project by its integer ID in Aprimo Marketing Operations. Only include the fields you intend to change (partial update; omitted fields are left as-is). Requires confirmed=true after showing the user the exact changes. Returns the updated Project.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID. |
body | string | Yes | JSON object with the fields to change (PM wire names). Omit fields you don't want to modify. |
confirmed | boolean | No | Must be true to proceed. Omit (or false) to get a confirmation gate error, then call again with confirmed=true after the user has explicitly approved the change. |
Returns:
| Field | Type | Description |
|---|---|---|
projectId | integer | |
title | string (optional) | |
projectStatusId | integer (optional) | |
projectStatusLabel | string (optional) | |
description | string (optional) | |
beginDate | string (optional) | |
endDate | string (optional) | |
projectManagerId | integer (optional) | |
projectManagerName | string (optional) | |
activityId | integer | |
activityName | string (optional) | |
activityDeepLink | string (optional) | |
deepLink | string (optional) | |
workflowId | integer (optional) | PM's workflow id for this project. Nullable per the schema. |
projectTypeId | integer (optional) | PM's project-type id. Nullable per the schema. |
modifiedDate | string (optional) | The project's last-modified timestamp (raw ISO-8601, not locale-formatted -- distinct from /, which route through ). |
modifiedUserId | integer (optional) | The user id who last modified the project. |
timeZoneId | integer (optional) | PM's time-zone id for the project's dates. |
projectScalingTypeId | integer (optional) | PM's project-scaling-type id. |
associatedProjectId | integer (optional) | The id of another project this one is associated with, if any. |
changeOrder | boolean (optional) | Whether this project represents a change order. |
projectedEndDate | string (optional) | Projected end date (distinct from the committed ). |
baselineEndDate | string (optional) | Baseline end date snapshot. |
brandName | string (optional) | The brand name associated with the project, when set. |
update_project_role_memberships
In the default tool list
Replaces the role memberships for a project, by the project's integer ID, in Aprimo Marketing Operations. Requires confirmed=true after showing the user the exact new memberships. Returns the updated memberships.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | The project's integer ID. |
body | string | Yes | JSON object with the new role memberships (PM wire names, e.g. { "roles": [{ "roleId": 1, "userId": 42 }] }). |
confirmed | boolean | No | Must be true to proceed. Omit (or false) to get a confirmation gate error, then call again with confirmed=true after the user has explicitly approved the change. |
Returns:
| Field | Type | Description |
|---|---|---|
activityId | integer (optional) | |
projectId | integer | |
projectName | string (optional) | |
roles | array of ProjectRoleUserItemProjection | |
roles[].roleId | integer (optional) | |
roles[].userId | integer (optional) | |
roles[].userName | string (optional) | |
roles[].userTokenId | integer (optional) | |
roles[].userToken | string (optional) | |
roles[].projectRoleId | integer (optional) |
Related
- Aprimo MCP Server — configuration, connection details, and authentication
- MCP Tool Permission Map — the Aprimo permissions that make each tool visible to your agent
- REST API vs. MCP — choosing the right integration approach for your agent