Manage Cursor team members, usage, spend, repo blocklists, billing groups and model access via the Admin API.
Cursor ships in the w6w first-party pack. It declares 24 actions, 1 health check, and the host runs its code in a sandbox that never sees the credential.
io.w6w.cursorCursor is an AI code editor. This app covers its Admin/Teams API — the team-management surface for Business and Enterprise plans, not the editor itself (which has no public API).
List and remove team members, and pull audit logs of team activity. Read daily usage metrics and granular per-event usage (model, tokens, cost) for reporting and dashboards, read per-member spend for the current billing cycle, and set individual or bulk spend limits to cap overage. Manage repository context blocklists so sensitive files never reach the AI’s context, and — on Enterprise — manage billing groups for chargeback and budgeting, and configure which model providers and models the team may use.
The surface is deliberately small: it is exactly what Cursor’s Admin API documents, nothing padded in. Model access and bulk spend-limit updates are themselves marked preview by the vendor.
Three routes to the same 24 actions. The Workflow tab is generated from Cursor's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.
audit-logs-list Retrieve audit log events for your team with filtering. Track team activity, security events, and configuration changes. The vendor caps a single request's date range at 30 days.
daily-usage-get Retrieve daily usage metrics for your team. Without page/page size, returns only users active during the range. With both set, returns every team member with a membership during the range, paginated.
group-delete Delete a billing group. Destructive and not recoverable: historical usage for the group is reassigned retroactively to the Unassigned group.
group-get Retrieve a single billing group with its members and spend data for the given (or current) billing cycle.
group-list Retrieve all billing groups for your team, with spend data for the given (or current) billing cycle. Enterprise only.
group-members-add Add team members to a billing group. Members must already be on the team and not currently assigned to another group. Groups synced with SCIM cannot be modified here.
group-members-remove Remove team members from a billing group. Removed members move to the reserved Unassigned group. Groups synced with SCIM cannot be modified here.
group-update Update a billing group's name OR its directory group attachment — only one field may be set per call; providing both makes two requests.
member-remove Remove a member from your team. Useful for automating offboarding workflows or integrating with HR systems.
model-access-configuration-get Read whether the team has a custom model-access policy, and the defaults for newly seen providers and models. Preview route.
model-access-configuration-update Create a custom model-access policy, update its defaults, or return the team to unrestricted. Preview route.
model-access-model-update Enable or disable a single model, and optionally set per-model parameter restrictions and a team default. Returns 409 while the team has no custom model-access policy.
model-access-provider-models-list List one provider's models with resolved enabled flags and per-model parameters. Returns 409 while the team has no custom model-access policy.
model-access-provider-update Enable or disable a whole provider. Returns 409 while the team has no custom model-access policy.
model-access-providers-list List catalog providers and models with resolved enabled flags and per-model parameters. Returns 409 while the team has no custom model-access policy.
repo-blocklist-list Retrieve all repository blocklists configured for your team — repositories and glob patterns preventing matching files from being used as AI context.
repo-blocklist-upsert Replace the blocklist patterns for the given repositories. Repositories not included are left unaffected.
spend-get Retrieve spending information for the current billing cycle, with search, sorting and pagination.
usage-events-list Retrieve detailed, event-level usage: model, token consumption, and cost — with filtering by user, service account, cloud agent run, automation, or hosting type.
user-spend-limit-set Set an individual team member's spending limit for AI usage. The member must already be a team member.
user-spend-limits-bulk-set Set spending limits for up to 100 team members in one request. Preview route: Enterprise only, and its shape may change before general availability.
A workflow step names the app and the action, and the editor fills in the
connection when you pick one. This is the Step shape from the
workflow spec, carrying Cursor's real ids.
{
"manifestVersion": "2",
"name": "cursor-example",
"steps": [
{
"id": "daily-usage-get",
"uses": {
"app": "io.w6w.cursor",
"action": "daily-usage-get",
"connection": "conn_YOUR_CONNECTION_ID"
},
"with": {
"startDate": "<startDate>",
"endDate": "<endDate>"
}
}
]
}daily-usage-get audit-logs-list group-create group-get group-list +19 more actions available
Every app-specific value here is a blank you have to fill in. An
app action is reached through the connection that authenticates it, so the
address is a connection id, not the app id — and connections belong to your account,
so a public page cannot know yours. Create one for Cursor, then fill in
the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the
parameters that action declares. The call itself is real — the shape is transcribed
from the studio's own snippet builder, which prints the same kind of blanks — but
nothing in it is specific to Cursor. The Workflow tab is where this app's
real ids are.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { W6wClient, isActionRun } from "@w6w/sdk";
// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();
const envelope = await client.run({
urn: "conn_YOUR_CONNECTION_ID",
action: "daily-usage-get",
payload: {
startDate: "<value>",
endDate: "<value>",
// page: "<value>",
// pageSize: "<value>",
},
});
if (isActionRun(envelope)) console.log(envelope.value); npm install -g @w6w/cli w6w run conn_YOUR_CONNECTION_ID --action daily-usage-get --payload '{"startDate":"<value>","endDate":"<value>"}' Give an AI agent Cursor — without giving it Cursor's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.
One tool call{
"name": "w6w_invoke",
"arguments": {
"ref": "app:io.w6w.cursor#daily-usage-get",
"input": {
"startDate": "<startDate>",
"endDate": "<endDate>"
}
}
}
Every tool names its target with a single ref. The
app: form above doesn't name a connection at all — the
host resolves which of the caller's Cursor connections to sign
with, and refuses rather than guesses when the answer is ambiguous.
The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.
Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.
Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.
Cursor's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.
The MCP surface is part of the hosted platform. Cursor itself is MIT, and the runtime that executes it is source-available (FSL).
Cursor declares its own checks, so its health is a property of the app rather than something the host guesses at.
Component status from status.cursor.com. Covers Cursor's product surfaces (Automations, Cloud Agents, CLI, IDE, Review Agents, Origin, Grok Bot, cursor.com) — none of which is the Admin/Teams API this app calls, so the verdict is capped at degraded rather than down.