Create Accountor Login
Docs

MountDev Connections

Part of the MountDev Ops Workspace documentation. Updated November 6, 2026

MountDev Ops Workspace documentation | Updated November 6, 2026

A connection lets an app or an AI assistant work in your workspace with exactly the permissions you pick, and no more. There is no connection that can do everything: you tick each permission, and each one is for one action in one app.

What a Permission Is

Every action has a permission id such as invoices.send and one of four levels:

  • Read looks at data and changes nothing.
  • Write adds or changes data.
  • Delete removes data. Anything that removes data is its own level.
  • Spending adds a service, changes a plan, or raises what you are charged or use. It quotes first and applies only when confirmed.

A connection acts as the member who made it, and never does more than that member could. A member who is not an owner or admin can connect an assistant with read permissions for what they can see. Only owners and admins, or anyone whose role allows managing connections, can give write, delete, or spending permissions.

Picking Permissions

  • Tick any number of permissions in any number of apps (action core.connect.pick lists them in plain words, by app, with the level marked).
  • Select all in this app ticks every permission of one app. A connection can use it for one app only. A second select-all is refused; tick the other app's permissions one by one.
  • There is no account-wide "all permissions" option anywhere. A request for one is refused.
  • A connection request link, such as /account/connect?name=Invoice+Helper&grant=invoices.read,invoices.send, only fills in the screen. It carries no key and no authority. You see each permission in plain words and can untick any (action core.connect.request). An unknown permission id, or one you may not give, is refused and says which.

Limits the Server Enforces

  • A spending action returns a quote first. Within your monthly limit the connection confirms its own quote. Above the limit, or when you chose Ask me every time, it waits for an owner or admin to approve it (actions core.connect.waiting and core.connect.decide). What the connection spends within its limit can never pass the limit, however many calls arrive at once. An amount an owner or admin approves is their own decision and is counted separately.
  • A delete that would remove more than one record waits for approval the same way. A delete that cannot say how many records it removes is treated as more than one.
  • Keys expire in 30, 90 (the default), 180, or 365 days, or never when you choose so. A key that never expires gets a yearly reminder to review it. The reminder changes nothing by itself.
  • You can limit a connection to certain IP addresses.
  • No action accepts SQL. An answer with more than one page of records is refused unless the action is marked bulk.

The Two Ways to Connect

  • Custom Integration gives an API key, shown once. Send it as Authorization: Bearer <key> to the REST API at /account/api/v1/ (GET actions lists what the connection can do, POST actions/<permission id> runs one), or to the MCP address as a header.
  • AI Assistant (MCP) has no key to copy. You save the permissions, add the connection address in the assistant, and the assistant sends you to sign in. The consent screen says plainly that it gives the assistant access to that workspace's data, as you, with the listed permissions. Tokens last an hour and renew. Revoking the connection ends it at once.

Both reach the same actions, with the same permission check and the same Activity Log row. The address names the workspace: /account/c/<workspace>/mcp. The shared front door only passes the request on to that workspace; the workspace checks the key itself.

Keys and Agent Connections You Already Have

Existing API keys and AI agent connections keep working exactly as they do until an owner or admin converts them (actions core.connect.legacy and core.connect.convert). Converting gives each one read and write permissions, listed one by one, for the actions it already reached in the apps it already had a role in. None gains delete or spending, and none becomes an all-access connection. Each gets an expiry 90 days out and its owners are told. Once converted, the old key or connection is held to those permissions and that expiry, and revoking it in the connection list ends the old key too. Billing keys are left as they are.

Your Own Signing Key

Your workspace makes its own key the first time it is needed, keeps it only in your workspace, and signs your connection keys with it. It is never shown, logged, or sent anywhere. A key for another workspace fails here, because that workspace has a different key. The owner can rotate it (action core.connect.rotate), which stops every connection key in this workspace, and only this workspace (the status is action core.connect.signing).

Seeing and Ending Connections

The connection list (action core.connect.list) shows each connection's permissions by app with levels, expiry, last used, and spending this month. Revoke (action core.connect.revoke) ends it: its next call is refused. Every call is in the Activity Log with the connection's name.

The Screens

  • Settings, Connections, Apps and AI is the first tab of Connections, for owners, admins, and anyone whose role allows managing connections. It shows what waits for your approval, the connection list, and the two addresses (the AI assistant address and the API address, both from action core.connect.pick, which also says which permissions this person may give). Connect an App or AI Assistant opens the form: choose AI Assistant (MCP) or Custom Integration, name it, tick permissions app by app (or Select All in This App for one app), set a monthly spending limit when spending is ticked, choose when it expires, and optionally list the addresses allowed. Review and Continue saves the permissions (action core.connect.draft) and shows the summary the server worked out (action core.connect.summary), then the agreement boxes. Save Connection starts it (action core.connect.start): a custom integration shows its key once, an AI assistant shows its connection address.
  • Details lists a connection's permissions in plain words, app by app, with the level marked. Revoke asks first and then ends the connection (action core.connect.revoke).
  • Waiting for Your Approval shows each spend over the limit and each bulk delete (action core.connect.waiting). Approve asks first and then runs it as the connection's member; Decline leaves everything as it was (action core.connect.decide).
  • Keys and Agents You Already Have appears when older API keys or AI agent connections have not been converted yet (action core.connect.legacy). Convert Them converts them (action core.connect.convert).
  • Connection Request opens from a request link, /account/connect?name=Invoice+Helper&grant=invoices.read,invoices.send. Each permission is ticked in plain words, grouped by app with its level, and you can untick any. A link that asks for nothing, for everything, for all of two apps, or for a permission that does not exist is refused, says which, and saves nothing (action core.connect.request).
  • Connect an AI Agent, in the Account menu, is the one page everyone uses to connect an AI app. Add to Claude, Copy and Open ChatGPT, and Copy Address copy the connection address and open the app's settings where there is one. Continue to Sign-In and Consent lets you choose what the assistant may do first. The page lists your connected agents with what each may do and when it was last used, with Disconnect. Owners and admins also see the keys their AI agents use.
  • Connect Your AI Assistant? is the consent screen the assistant sends you to after you sign in, at /account/c/<workspace>/oauth/authorize. It says plainly that it gives the assistant access to this workspace's data, as you, with only the permissions you leave ticked (action core.connect.consent_view). Approve starts the connection and sends you back to the assistant (action core.connect.approve); Decline ends it with nothing connected and tells the assistant. Only the signed-in person of the workspace named in the address can open it; anyone else is asked to sign in or told it is for another workspace.

A member who cannot give write, delete, or spending sees those permissions switched off with the reason, and no approvals. Who can give them is a permission, not a role name: anyone whose role or permission group allows managing connections sees them on.

Ask Us Anything

We’d love to hear from you!