Telemetry
On Node.js, the SDK sends usage counts for read operations. Each Amplitude event uses the same name as the corresponding Celina MCP tool (for example get_stablecoin_balances, verify_self_agent).
What is sent
Event name (MCP tool name)
A
device_ididentifying the npm package that calledcreateCelinaClient()(auto-detected from itspackage.jsonname, sanitized for Amplitude: strip leading@, replace/and-with_, e.g.celeste_ai,andrewkimjoseph_celina_mcp). Falls back tocelina-sdkwhen detection fails.Amplitude
user_idset to the lowercase wallet0x…address when the read is wallet-scoped (noevent_properties— wallet is only onuser_id)No tool arguments or private keys
Wallet resolution order:
Wallet address extracted from the read call args (catalog-driven)
runWithAnalyticsWallet(address, fn)request scope (singleton SDK clients)analyticsWalletAddressoncreateCelinaClient()(e.g. MCP session signer)
Writes and prepare* flows are not tracked (dual on-chain Celina attribution covers those — see On-chain attribution). Custom attributionTags from client config appear in the calldata suffix on-chain, not in Amplitude events.
Default behavior
Telemetry is on for server-side use (MCP, your app's API routes, scripts) unless you opt out.
Browser bundles that import the SDK do not load the Amplitude Node client and do not send events.
On serverless hosts (Vercel, AWS Lambda, Cloudflare Workers), do not await Amplitude on the request path — that adds ingest RTT (or a hung timeout) to every read. Track is fire-and-forget; keep the isolate alive with waitUntil(drainCelinaAnalytics()) (Workers) or waitUntil / after(() => drainCelinaAnalytics()) (Vercel / Next). flushCelinaAnalytics() alone no-ops if init has not finished yet.
Singleton clients (e.g. Next.js API routes)
When one shared createCelinaClient() serves many users, wrap the handler:
Opt out
Overrides
AMPLITUDE_API_KEY
Replace the bundled project key
amplitudeApiKey in createCelinaClient()
Same, in code
analyticsDeviceId in createCelinaClient()
Override auto-detected Amplitude device_id
analyticsWalletAddress in createCelinaClient()
Default wallet for user_id when reads omit an address
Last updated
Was this helpful?