Agents and bots
MCP server
Give your own agent the same record, read-only, with the events it can cite. It can ask what you hold and what you owe; it cannot spend, approve, or bridge anything.
The server speaks JSON-RPC 2.0 over HTTP POST. There is no npm package to install and no process to spawn: point your client at the URL and send it an API key. No event stream either — every tool is a read, so there is nothing to push.
{
"mcpServers": {
"accuren": {
"type": "http",
"url": "https://dapp.accuren.xyz/api/mcp",
"headers": { "Authorization": "Bearer acc_live_…" }
}
}
}Create the key in the dApp under Developers. The handshake — initialize, ping, tools/list announcements — is open; everything past it reads account data and needs the key, and a missing one comes back as 401 with a WWW-Authenticate: Bearer header rather than an empty tool list.
Give the agent its own key
Keys are per-integration and revocable one at a time, so an agent's key can be pulled without breaking your own scripts. Note that a key is not narrowable: Accuren issues no scopes, and a key that can read can also add a wallet or generate an export. It can never sign or move anything — there is no such endpoint to reach.
#Tools
Eleven, and exactly the eleven the in-app assistant uses — tools/list maps the same constant the assistant is given, so the two can never drift apart. Every one is a read.
| Tool | Returns |
|---|---|
get_portfolio_summary | Value, cost basis, unrealised gain, accrued dividend income, the rate in use, and whether US markets are open |
get_positions | Per position: balance, the multiplier now and at acquisition, share equivalence, and basis |
get_multiplier_history | Every recorded change to a token's multiplier, from the issuer's own UIMultiplierUpdated events |
get_activity | On-chain movements, filterable by token and event type, each with its transaction hash |
get_unlabeled_counterparties | Addresses whose relationship is unknown, and how many movements each one blocks |
get_alerts | Open alerts, filterable by severity |
get_weekend_exposure | Per token: the archived last close, the price now, and the drift between them — with a status saying why any figure is missing |
estimate_sale | What a disposal would look like, including the US 365-day line |
get_exchange_rate_on | The ECB reference rate for a date, with its source and whether it was carried forward |
get_recent_filings | SEC filings for the issuers you follow |
get_dividend_history | Declared dividend per share, from SEC XBRL |
Nulls are not zeros
The server says so in its own initialize instructions, and it is the one thing worth passing to your agent's prompt: where a value cannot be established the tools return null. A null cost basis means unknown, never free.
#What every answer carries
Tool results include the events and rates behind them, so an agent can cite rather than assert. An answer about tax that cannot be traced back to a block is a guess wearing a suit.
curl -X POST https://dapp.accuren.xyz/api/mcp \
-H "Authorization: Bearer $ACCUREN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "get_multiplier_history", "arguments": { "symbol": "NVDA" } }
}'The read-only guarantee holds here too
There is no tool that signs, transfers, approves, or bridges. If an agent decides you should top up a loan, it has to come and tell you.