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/mcpThe 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.
| Scope | Shown as | Allows | Granted by |
|---|---|---|---|
read | Read | Read 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 |
write | Write | Everything 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 |
admin | Admin | Everything 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_listpages with filters (total.kindsays whether its count isexact, anestimateorat_least);records_aggregatecounts and sums per group;sql_queryruns one read-only statement (Query).records_importtakes up to 500 rows a call; run it withdryRun: truefirst.schema_previewshows the SQLschema_changewould run.views_updateandlayouts_updatechange things for the person only;views_save_for_everyoneandlayouts_save_for_everyonefor everyone.plugins_manifest_schema, thenplugins_create/plugins_update, build workspace plugins;plugins_run_actionruns a bundled plugin's action, which may start a job.- Every write returns the
activityIdsthatactivity_undotakes.
| Tool | What it does | Scope | Who |
|---|---|---|---|
activity_list | List activity | read | Any member |
approvals_get | Get an approval | read | Any member |
approvals_list | List approvals | read | Any member |
data_sources_get | Get a data source | read | Any member |
data_sources_list | List data sources | read | Any member |
jobs_get | Get a job | read | Any member |
jobs_list | List jobs | read | Any member |
layouts_get | Get a page layout | read | Any member |
objects_get | Get an object | read | Any member |
objects_list | List objects | read | Any member |
plugins_get | Get a plugin | read | Any member |
plugins_list | List plugins | read | Any member |
plugins_list_actions | List plugin actions | read | Any member |
plugins_manifest_schema | Get the plugin manifest schema | read | Any member |
records_aggregate | Aggregate records | read | Any member |
records_get | Get a record | read | Any member |
records_list | List records | read | Any member |
records_related | Related records | read | Any member |
records_search | Search records | read | Any member |
schema_preview | Preview a schema change | read | Any member |
sql_query | Run a read-only SQL query | read | Any member |
workspace_describe | Describe the workspace | read | Any member |
workspace_get | Get the workspace | read | Any member |
workspace_members | List members | read | Any member |
activity_comment | Add a note to a record's timeline | write | Any member |
activity_undo | Undo activity | write | Any member |
attributes_reorder | Reorder an object's fields | write | Any member |
attributes_update | Update a field | write | Any member |
connected_apps_list | List connected apps | write | Any member |
connected_apps_revoke | Disconnect an app | write | Any member |
jobs_cancel | Cancel a job | write | Any member |
layouts_update | Change a page layout | write | Any member |
objects_reorder | Reorder objects | write | Any member |
objects_update | Update an object | write | Any member |
plugins_create | Build a plugin | write | Any member |
plugins_reset | Reset a workspace plugin | write | Any member |
plugins_run_action | Run a plugin action | write | Any member |
plugins_update | Change a workspace plugin | write | Any member |
records_create | Create records | write | Any member |
records_delete | Delete records | write | Any member |
records_import | Import records | write | Any member |
records_update | Update a record | write | Any member |
records_update_many | Update records | write | Any member |
views_update | Update a view | write | Any member |
workspace_leave | Leave the workspace | write | Any member |
api_keys_create | Create an API key | admin | Owners and admins |
api_keys_list | List API keys | admin | Owners and admins |
api_keys_revoke | Revoke an API key | admin | Owners and admins |
attributes_delete | Delete a missing field | admin | Owners and admins |
data_sources_create | Connect a data source | admin | Owners and admins |
data_sources_create_sample | Use the sample database | admin | Owners and admins |
data_sources_delete | Disconnect a data source | admin | Owners and admins |
data_sources_sync | Sync a data source | admin | Owners and admins |
data_sources_test | Test a data source | admin | Owners and admins |
data_sources_test_connection | Test connection details | admin | Owners and admins |
data_sources_update | Update a data source | admin | Owners and admins |
data_sources_update_connection | Change a data source's connection | admin | Owners and admins |
layouts_save_for_everyone | Save a page layout for everyone | admin | Owners and admins |
objects_set_key | Set an object's key | admin | Owners and admins |
plugins_delete | Delete a workspace plugin | admin | Owners and admins |
plugins_save_for_everyone | Save a workspace plugin for everyone | admin | Owners and admins |
plugins_set_enabled | Enable or disable a plugin | admin | Owners and admins |
plugins_update_settings | Update plugin settings | admin | Owners and admins |
schema_change | Change a data source's schema | admin | Owners and admins |
views_create | Create a view | admin | Owners and admins |
views_delete | Delete a view | admin | Owners and admins |
views_reorder | Reorder views | admin | Owners and admins |
views_save_for_everyone | Save a view for everyone | admin | Owners and admins |
workspace_delete | Delete the workspace | admin | Owners |
workspace_invitations | List pending invitations | admin | Owners and admins |
workspace_invite | Invite someone | admin | Owners and admins |
workspace_remove_member | Remove a member | admin | Owners and admins |
workspace_rename | Rename the workspace | admin | Owners and admins |
workspace_revoke_invitation | Revoke an invitation | admin | Owners and admins |
workspace_update_member_role | Change a member's role | admin | Owners 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.
| Operation | What it does | Why agents can't |
|---|---|---|
agent.confirmTool | Answer a copilot step | A 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.delete | Delete a copilot thread | A 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.get | Get a copilot thread | A 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.interrupt | Stop the copilot | A 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.list | List copilot threads | A 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.sendMessage | Message the copilot | A 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.start | Start a copilot thread | A 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.approve | Approve a change | A person decides what agents may do that can't be undone: owners and admins approve it in Settings → AI & agents. |
approvals.reject | Reject a change | A person decides what agents may do that can't be undone: owners and admins reject it in Settings → AI & agents. |
waitlist.approve | Let someone in | Only the deployment's operators let people in, signed in on the operator page (/operator): it opens sign-up to someone, outside any workspace. |
waitlist.list | List the waitlist | Only the deployment's operators let people in, signed in on the operator page (/operator): it opens sign-up to someone, outside any workspace. |
workspace.acceptInvitation | Accept an invitation | It joins another workspace, which widens the person's own access: only they decide that, from the invitation's link. |
workspace.create | Create a workspace | It creates another workspace, which a credential bound to this one could never act in. People do it from the sidebar's workspace menu. |
workspace.declineInvitation | Decline an invitation | It 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.invitation | Get an invitation | It 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.list | List my workspaces | It 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/mcpand/api/v1refuse browser requests from other sites; each credential makes at most 300 requests a minute.