Agents

The copilot on Claude Managed Agents, approvals for what can't be undone, and connecting your own agent over MCP.

Every agent works on a workspace the same way: through Dataembed's MCP server, with the tools its scope and its person's role allow, logged under its name, undoable where the change is. That includes the copilot.

The copilot

⌘J / Ctrl+J opens it in the side panel. It sees what's on the page (the object, the view, the selected records, the open record), and answers from tool results only.

  • It runs on Claude Managed Agents, as Claude Opus 5.5, with web search, web fetch and a sandbox for code. It reaches Dataembed only over MCP, as you: your role, now.
  • Undo first. It makes the change you asked for at once rather than asking first; every change to records, views, layouts, plugins, objects and fields is in the activity, ready to undo.
  • What can't be undone waits for an approval (below). Some web or sandbox steps ask you first: Allow or deny.
  • It lists your threads, where you start a new one or delete one. Threads are yours alone: nobody else, owner or agent, reads them.
  • A thread has a budget ($5). Past it, the thread stops; start a new one.
  • It needs AI set up on the deployment: until then it says so, and the plugin shows Needs configuration.

Copilot instructions give it, and every connected agent, standing notes about the workspace.

Jobs

Long work runs unattended as a job with its own budget: Fill with AI fills a field for many records, Find records adds records from the web. A job acts as the person who started it, and shows on the object's toolbar with its progress and Cancel (its starter, or an owner or admin). Agents follow it with jobs_get and stop it with jobs_cancel.

Approvals

A change that can't be undone (deleting records, fields, plugins or a data source, a schema change, an object's key, a connection, API keys, the team, the workspace's name) doesn't run when an agent calls it, whichever agent and whatever its scope. It's held:

  • the call fails with PENDING_APPROVAL (HTTP 403) and an approval id, summary and expiry;
  • any owner or admin approves or rejects it: in Settings → AI & agents → Approvals, or with Approve and run / Reject on the copilot's card;
  • once approved, it runs as the agent that asked; only that agent reads what it answered (approvals_get);
  • unanswered, it expires after 24 hours.

A person signed in does these themselves, after a confirmation, without an approval.

Bring your own agent

Claude, ChatGPT, Claude Code, Cursor and other MCP clients connect to https://<your-dataembed>/api/mcp. Settings → AI & agents shows the URL and ready-to-copy snippets.

Sign in (OAuth)

Add the URL as a custom connector or MCP server. Claude Code:

claude mcp add --transport http dataembed https://<your-dataembed>/api/mcp

The app sends you to Dataembed to sign in, pick the workspace and approve what it may do: one scope, starting at the highest it asked for below admin (only owners and admins are offered admin). An app that names a verified domain shows it; one that registered itself shows Unverified app. It then acts as you, with your role now; its changes show as "Claude via Ada". Access tokens last an hour and refresh for 30 days; an app that uses DPoP gets tokens bound to its key.

Settings → AI & agents → Connected apps lists the apps (owners and admins see everyone's); Disconnect stops one at once. Leaving the workspace disconnects yours there.

Or an API key

For clients that only send a header, and scripts. Owners and admins Create API key in Settings → AI & agents: a name, a scope (write by default), an optional expiry. The key (de_…) is shown once. It acts for its creator with their role now; one key per agent, so each can be revoked alone.

claude mcp add --transport http dataembed https://<your-dataembed>/api/mcp \
  --header "Authorization: Bearer de_your_api_key"
{
  "mcpServers": {
    "dataembed": {
      "headers": { "Authorization": "Bearer de_your_api_key" },
      "url": "https://<your-dataembed>/api/mcp"
    }
  }
}

The same key calls the JSON API. A good first prompt: "Describe my dataembed workspace." On connecting, the server tells the agent what it can't do and where a person does it, which tools its scope or its person's role holds back, and the workspace's instructions.

Settings → AI & agents lists each key with its state (status in api_keys_list): active, paused while its creator is suspended, dead once they leave or it has no scope, expired or revoked. A key made by a key, an app or an agent (the copilot, AI fill, web search) names who issued it. Revoking stops an active or paused key at once, with every key issued through it; any other is left as it is.

Scopes

A key or an app has one scope, and can do only what it allows and its person's role allows now. Each includes the one before. admin is opt-in, and only owners and admins grant it.

ScopeShown asAllowsGranted by
readReadRead records, their activity and related records, and the schema: objects, fields, views, page layouts, data sources and plugins; run read-only SQL against the workspace's databases, on any table their connections can read.Any member
writeWriteEverything Read allows, plus create, change and delete records and comment on them; change objects and fields; change views and page layouts for yourself; run plugin actions; see and disconnect your own connected apps; leave the workspace.Any member
adminAdminEverything Write allows, plus what owners and admins do: connect and disconnect databases and change their connections and access, add tables and columns to a database that allows schema changes, delete objects and fields and change an object's record key, make, reorder and delete views and save views and page layouts for everyone, manage plugins, API keys, everyone's connected apps and the team, and rename the workspace (an owner's key or app may also delete it). Owners and admins only.Owners and admins

Tools

One tool per operation of the API, named after it (records_update_many is records.updateMany), listed only when the credential's scope reaches it and its person's role allows it: 75 for an owner with admin, 74 for an admin, 45 with write, 24 with read.

  • Tools name objects and fields by slug, and return each record with its label and a link. Start with workspace_describe.
  • records_list pages with filters (total.kind says whether its count is exact, an estimate or at_least); records_aggregate counts and sums per group; sql_query runs one read-only statement (Query).
  • records_import takes up to 500 rows a call; run it with dryRun: true first.
  • schema_preview shows the SQL schema_change would run.
  • views_update and layouts_update change things for the person only; views_save_for_everyone and layouts_save_for_everyone for everyone.
  • plugins_manifest_schema, then plugins_create / plugins_update, build workspace plugins; plugins_run_action runs a bundled plugin's action, which may start a job.
  • Every write returns the activityIds that activity_undo takes.
ToolWhat it doesScopeWho
activity_listList activityreadAny member
approvals_getGet an approvalreadAny member
approvals_listList approvalsreadAny member
data_sources_getGet a data sourcereadAny member
data_sources_listList data sourcesreadAny member
jobs_getGet a jobreadAny member
jobs_listList jobsreadAny member
layouts_getGet a page layoutreadAny member
objects_getGet an objectreadAny member
objects_listList objectsreadAny member
plugins_getGet a pluginreadAny member
plugins_listList pluginsreadAny member
plugins_list_actionsList plugin actionsreadAny member
plugins_manifest_schemaGet the plugin manifest schemareadAny member
records_aggregateAggregate recordsreadAny member
records_getGet a recordreadAny member
records_listList recordsreadAny member
records_relatedRelated recordsreadAny member
records_searchSearch recordsreadAny member
schema_previewPreview a schema changereadAny member
sql_queryRun a read-only SQL queryreadAny member
workspace_describeDescribe the workspacereadAny member
workspace_getGet the workspacereadAny member
workspace_membersList membersreadAny member
activity_commentAdd a note to a record's timelinewriteAny member
activity_undoUndo activitywriteAny member
attributes_reorderReorder an object's fieldswriteAny member
attributes_updateUpdate a fieldwriteAny member
connected_apps_listList connected appswriteAny member
connected_apps_revokeDisconnect an appwriteAny member
jobs_cancelCancel a jobwriteAny member
layouts_updateChange a page layoutwriteAny member
objects_reorderReorder objectswriteAny member
objects_updateUpdate an objectwriteAny member
plugins_createBuild a pluginwriteAny member
plugins_resetReset a workspace pluginwriteAny member
plugins_run_actionRun a plugin actionwriteAny member
plugins_updateChange a workspace pluginwriteAny member
records_createCreate recordswriteAny member
records_deleteDelete recordswriteAny member
records_importImport recordswriteAny member
records_updateUpdate a recordwriteAny member
records_update_manyUpdate recordswriteAny member
views_updateUpdate a viewwriteAny member
workspace_leaveLeave the workspacewriteAny member
api_keys_createCreate an API keyadminOwners and admins
api_keys_listList API keysadminOwners and admins
api_keys_revokeRevoke an API keyadminOwners and admins
attributes_deleteDelete a missing fieldadminOwners and admins
data_sources_createConnect a data sourceadminOwners and admins
data_sources_create_sampleUse the sample databaseadminOwners and admins
data_sources_deleteDisconnect a data sourceadminOwners and admins
data_sources_syncSync a data sourceadminOwners and admins
data_sources_testTest a data sourceadminOwners and admins
data_sources_test_connectionTest connection detailsadminOwners and admins
data_sources_updateUpdate a data sourceadminOwners and admins
data_sources_update_connectionChange a data source's connectionadminOwners and admins
layouts_save_for_everyoneSave a page layout for everyoneadminOwners and admins
objects_set_keySet an object's keyadminOwners and admins
plugins_deleteDelete a workspace pluginadminOwners and admins
plugins_save_for_everyoneSave a workspace plugin for everyoneadminOwners and admins
plugins_set_enabledEnable or disable a pluginadminOwners and admins
plugins_update_settingsUpdate plugin settingsadminOwners and admins
schema_changeChange a data source's schemaadminOwners and admins
views_createCreate a viewadminOwners and admins
views_deleteDelete a viewadminOwners and admins
views_reorderReorder viewsadminOwners and admins
views_save_for_everyoneSave a view for everyoneadminOwners and admins
workspace_deleteDelete the workspaceadminOwners
workspace_invitationsList pending invitationsadminOwners and admins
workspace_inviteInvite someoneadminOwners and admins
workspace_remove_memberRemove a memberadminOwners and admins
workspace_renameRename the workspaceadminOwners and admins
workspace_revoke_invitationRevoke an invitationadminOwners and admins
workspace_update_member_roleChange a member's roleadminOwners and admins

What agents can't do

These are for people signed in, in the app: they act outside one workspace, widen access, or are a person's own. They're no tool, and the API refuses them to keys.

OperationWhat it doesWhy agents can't
agent.confirmToolAnswer a copilot stepA copilot conversation is the person's own: they start, follow and delete it in the copilot panel. Agents reach dataembed through these tools instead.
agent.deleteDelete a copilot threadA copilot conversation is the person's own: they start, follow and delete it in the copilot panel. Agents reach dataembed through these tools instead.
agent.getGet a copilot threadA copilot conversation is the person's own: they start, follow and delete it in the copilot panel. Agents reach dataembed through these tools instead.
agent.interruptStop the copilotA copilot conversation is the person's own: they start, follow and delete it in the copilot panel. Agents reach dataembed through these tools instead.
agent.listList copilot threadsA copilot conversation is the person's own: they start, follow and delete it in the copilot panel. Agents reach dataembed through these tools instead.
agent.sendMessageMessage the copilotA copilot conversation is the person's own: they start, follow and delete it in the copilot panel. Agents reach dataembed through these tools instead.
agent.startStart a copilot threadA copilot conversation is the person's own: they start, follow and delete it in the copilot panel. Agents reach dataembed through these tools instead.
approvals.approveApprove a changeA person decides what agents may do that can't be undone: owners and admins approve it in Settings → AI & agents.
approvals.rejectReject a changeA person decides what agents may do that can't be undone: owners and admins reject it in Settings → AI & agents.
waitlist.approveLet someone inOnly the deployment's operators let people in, signed in on the operator page (/operator): it opens sign-up to someone, outside any workspace.
waitlist.listList the waitlistOnly the deployment's operators let people in, signed in on the operator page (/operator): it opens sign-up to someone, outside any workspace.
workspace.acceptInvitationAccept an invitationIt joins another workspace, which widens the person's own access: only they decide that, from the invitation's link.
workspace.createCreate a workspaceIt creates another workspace, which a credential bound to this one could never act in. People do it from the sidebar's workspace menu.
workspace.declineInvitationDecline an invitationIt answers the person's own invitation to another workspace, outside the workspace a credential is bound to. People answer it from the invitation's link.
workspace.invitationGet an invitationIt is what an invite link shows its recipient, usually about another workspace than the one a credential is bound to. This workspace's invitations are listed by workspace_invitations.
workspace.listList my workspacesIt lists the person's other workspaces, which a credential bound to this one can't act in. People do it from the sidebar's workspace menu.

No escalation

  • An agent never grants more than it holds: a key made by a key gets no higher scope, expires no later and is revoked with it.
  • Nobody changes their own role, and only an owner makes or changes owners.
  • The current role always applies: demote a key's creator and its admin tools stop at once.
  • /api/mcp and /api/v1 refuse browser requests from other sites; each credential makes at most 300 requests a minute.

On this page