Accurendocs
Access dApp

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.

mcp config
{
  "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.

ToolReturns
get_portfolio_summaryValue, cost basis, unrealised gain, accrued dividend income, the rate in use, and whether US markets are open
get_positionsPer position: balance, the multiplier now and at acquisition, share equivalence, and basis
get_multiplier_historyEvery recorded change to a token's multiplier, from the issuer's own UIMultiplierUpdated events
get_activityOn-chain movements, filterable by token and event type, each with its transaction hash
get_unlabeled_counterpartiesAddresses whose relationship is unknown, and how many movements each one blocks
get_alertsOpen alerts, filterable by severity
get_weekend_exposurePer token: the archived last close, the price now, and the drift between them — with a status saying why any figure is missing
estimate_saleWhat a disposal would look like, including the US 365-day line
get_exchange_rate_onThe ECB reference rate for a date, with its source and whether it was carried forward
get_recent_filingsSEC filings for the issuers you follow
get_dividend_historyDeclared 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.

tools/call
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.

⌘I