Connect an assistant
1
Add NanoCorp to your assistant
In your assistant’s settings, add a custom connector (some assistants call
it an app, an integration or an MCP server) with this address:If it asks how to sign in, choose OAuth. In Meta Muse, enter this client
ID:In other assistants, leave any client ID and client secret fields empty.
2
Sign in or create your account
Your assistant opens a NanoCorp sign-in page. Sign in with your NanoCorp
account, or create one there.
3
Review and allow
A NanoCorp page asks you to confirm the connection. Check what it shows
(see below), then click Allow. You are sent back to your assistant,
and it can start working.
The confirmation page
Before anything is shared, NanoCorp shows you a confirmation page:- A title that reads Connect … to your NanoCorp account, with the assistant’s name in the middle.
- Registered with NanoCorp when we registered the assistant ourselves, Not verified by NanoCorp otherwise. An assistant that registered itself can be shown by the web address it sends your access to instead of by its name.
- This request will send your access to …: the address that receives your access. For an app running on your own computer, it reads “this computer, port …” instead. Only click Allow if you started this connection yourself and you recognize the address.
- What the assistant will be able to do: “Create and run businesses in your account, take actions on your behalf.”
- The account you are signed in with, and Switch to use another one.
- Allow and Deny.
Trial and credits
- Every new account starts with a 3-day free trial.
- The first time your assistant starts a business for you, your account receives 15 welcome credits, unless it already received them, for example from a founding interview on the web. You receive them once per account.
- Starting a business needs a Founder plan or a live trial, and at least 12 credits. The welcome credits cover your first business.
- After the trial, you need a paid plan. See Plans and credits.
- Starting a business and every message you send to a business start agent turns, and turns spend credits. All your businesses share one balance.
- When your credits run out, your businesses’ agents can’t start new work. Your assistant gives you a link to top up or upgrade, and you pay on NanoCorp: your assistant never takes payment details and can’t buy a plan or a top-up. If automatic top-ups are on, they still apply, including when your assistant starts a business.
What an assistant can do
A connected assistant acts as you, across every business in your account. It can:- start a business from an idea, pause it, or turn its scheduled work back on,
- send a message to a business’s agent, follow the work, answer the agent’s questions, or stop a turn,
- check your credits and plan, and give you top-up and upgrade links,
- upload files for a business’s agent to read,
- use the tools your businesses’ agents use: email, products and payment links, your customers’ subscriptions, documents, tasks, files, your site and custom domain, analytics, ads, prospects, web research, images, your business’s database and its code repository.
What an assistant cannot do
For these, your assistant gives you a link to the page where you do it yourself, and changes nothing:- cancel or change your NanoCorp plan,
- turn automatic top-ups on or off,
- request a withdrawal of a business’s earnings,
- archive a business,
- delete your account,
- rotate a business’s API key.
How turns work
Every message you send to a business through your assistant starts an agent turn. A turn usually takes several minutes, and can take more than half an hour. Your assistant checks on it and brings back the answer. If the agent needs something from you, your assistant relays its question and sends your answer back. A business works on one message at a time: your assistant sends the next one once the current turn has ended. If your assistant stops checking on a turn, the turn keeps running and spending credits, as it would if you closed the dashboard. You can ask your assistant to stop a turn at any time.Disconnect
To disconnect, remove NanoCorp from your assistant’s settings. Your assistant’s access does not expire on its own, and not every assistant tells NanoCorp when you disconnect it. To make sure the connection is closed on our side too, or if you no longer have access to the assistant, contact support@nanocorp.so.For assistant builders
Everything below is for developers building an assistant or a client that connects to NanoCorp.Endpoint and protocol
- MCP endpoint:
https://mcp.nanocorp.so, at the root path (/mcpis not served), streamable HTTP. - Protocol: MCP revision
2026-07-28only. A request with an older revision is refused withUnsupportedProtocolVersion(-32022). - Authentication: OAuth only. An unauthenticated request gets a
401with aWWW-Authenticate: Bearerchallenge whoseresource_metadatapoints to the protected resource metadata below. NanoCorp API keys and command-line tokens are not accepted on this endpoint.
Discovery
The authorization server is
https://accounts.nanocorp.so. Its metadata
advertises client_id_metadata_document_supported: true, the registration
endpoint and the revocation endpoint.
Authorization
- OAuth 2.1 authorization code flow with PKCE.
code_challenge_method=S256is required, and so isstate. - Public clients only:
token_endpoint_auth_methodisnone. Sendclient_idin the form body; a BasicAuthorizationheader or aclient_secretis refused withinvalid_request. resource=https://mcp.nanocorp.so(RFC 8707). A trailing slash is accepted. When it is absent or empty, the request is bound to the MCP server.scope=nanocorp, which grants the user’s full access.openidandoffline_accessare accepted and ignored.- No
nonceis needed and no ID token is issued. - Every redirect back to the client carries
iss(RFC 9207). prompt=nonereturns a code when the user’s consent is current. Otherwise a pre-registered client getslogin_requiredorconsent_required. Any otherpromptvalue, andmax_age, is refused withinvalid_request.response_modemust bequerywhen sent.- Until a user has approved your redirect URI, an authorization error for a
self-registered client (
prompt=noneincluded) is shown to the user on a NanoCorp page instead of being redirected to you. - Redirect URIs are compared exactly, except the port of a native client’s
httploopback redirect.
Client registration
Use one of three ways:-
Client ID metadata document. Your
client_idis thehttpsURL of a JSON document you publish, with a path and no query or fragment. The document’sclient_idmust equal that URL exactly, and it needsclient_nameandredirect_uris. When it liststoken_endpoint_auth_methods_supported, the list must includenone; without that list,token_endpoint_auth_methodmust benoneor absent. Serve it from a public address, asapplication/json, without redirects, within 10 seconds and 64 KB. It is cached for up to 24 hours (max-ageis honored). The confirmation page shows its host as the source of the app details. -
Dynamic client registration (RFC 7591) at
POST https://accounts.nanocorp.so/oidc/register:redirect_uris: 1 to 10 entries.webclients (the defaultapplication_type) usehttpsonly;nativeclients may also usehttpon127.0.0.1,[::1]orlocalhost, with any port and path.grant_types: absent,["authorization_code"], orauthorization_codewithrefresh_token. The registration is stored asauthorization_codeonly.response_types: absent or["code"].token_endpoint_auth_method: absent ornone.client_name: required, 1 to 64 characters.client_uri: optional,https.logo_uriand unknown fields are ignored.
201with yourclient_id,client_id_issued_atand the accepted metadata. No secret is issued. -
Pre-registered client. Write to
support@nanocorp.so if you need a fixed
client ID. The confirmation page then shows your name as
Registered with NanoCorp. Meta Muse uses the pre-registered client ID
nca_ed8095a90ede567a36e12ca1.
Tokens and revocation
Exchange the code atPOST https://accounts.nanocorp.so/oidc/token with
grant_type=authorization_code, code, redirect_uri, client_id and
code_verifier. The response is:
POST https://accounts.nanocorp.so/oidc/revoke, form-encoded, with token
and client_id (RFC 7009). A well-formed request always gets 200, whether
or not the token was live. A revoked token stops working within a minute.
Tools
Start withlist_businesses. Every tool that acts on one business takes a
required business argument: the business’s handle or id.
These tools are specific to assistants:
The rest of the catalog is the tool set your businesses’ agents use (email,
products and payments, documents, tasks, files, site and domain, analytics,
ads, prospects, web research, images, database and repository access), each
with the
business argument added. tools/list is the source of truth: it is
sorted by name and cached for one hour (ttlMs, cacheScope: private).
These tools only return a link and change nothing: cancel_platform_subscription,
change_auto_topup, request_withdrawal, archive_business, delete_account,
rotate_api_key, rotate_app_signin_secret and rotate_user_auth_secret.
Their result is:
cancel_subscription is a different tool: it cancels a subscription that one
of the business’s customers bought.
Founding a business
create_business returns at once with business, welcome_credits_granted
and first_pass. first_pass.status is one of:
started: poll itsturn_idwithget_turn.provisioning: the business is still being set up (about a minute). Pollget_businessuntilreadyistrue, then callstart_first_pass.skipped: the business already has its founding plan; there is nothing to start.not_started: the business exists but its first turn could not start.detailsays why, anderrornames the refusal when there is one. Withconflict, a turn is already running: poll theturn_idit carries. Otherwise fix the cause (for exampleinsufficient_credits), then callstart_first_pass.
create_business again for the same idea: a retry of the same idea
by the same client within ten minutes returns the business already created
instead of a second one.
Turns
send_message returns turn_id, session_id and business_id at once. Poll
get_turn every few seconds. Its status is one of queued, running,
waiting, completed, failed or interrupted. A waiting turn carries
the agent’s question: relay it to the user and answer with send_message on
the same business. A business runs one turn at a time; a message sent while
one runs is refused with conflict.
Clients that declare the io.modelcontextprotocol/tasks extension get a task
from send_message instead: the task id is the turn id, and pollIntervalMs
is 5 seconds. tasks/get reports it as working, completed or
cancelled: a failed turn is completed with an error result, and an
interrupted one is cancelled. tasks/cancel stops the turn. tasks/update
is not supported: send a new message instead.
Errors
A refusal comes back as a tool result withisError: true and a JSON object:
error names the case and detail is a sentence you can show the user. Switch
on error:
Other codes can appear. Always show
detail.
An insufficient_credits refusal carries the links to fix it:
null. When NanoCorp knows why,
the reason is in a key next to it (for example top_up_unavailable). Inside
create_business, a first_pass with error: insufficient_credits carries
only needed: call get_billing_links for the links.
Limits
- The per-business limits in Rate limits apply to calls made through an assistant too, on the same counters as the business’s own agents.
get_billing_links: 30 calls an hour and 200 a day per account.- Tool results over 1 MB are refused with
too_large: narrow the request. upload_filetakes files up to 3 MB. Larger files go through the Files panel of the business dashboard.