Instrument your agents
Lookspan ingests spans over HTTP. You can build that payload yourself, but the adapters do it for you — capturing model, tokens, prompt/response and timing with no code rewrite. Pick the one that matches your stack:
| If your agent uses… | Use | Page |
|---|---|---|
| The OpenAI Node SDK | @lookspan/openai | OpenAI SDK |
| The Anthropic Node SDK | @lookspan/anthropic | Anthropic SDK |
| An MCP client (tool calls) | @lookspan/mcp | MCP SDK |
| LangGraph / LangChain / CrewAI (Python) | lookspan + adapter | Python |
| Any OpenTelemetry exporter | (no SDK) | OpenTelemetry |
| Anything that can POST JSON | (no SDK) | HTTP API |
Shared options
The TypeScript drop-in observers (observeOpenAI, observeAnthropic) and the
MCP wrapper accept the same option bag:
| Option | Type | Default | What it does |
|---|---|---|---|
endpoint | string | http://127.0.0.1:3100/api/ingest | Where spans are POSTed. |
exporter | SpanExporter | — | Bring your own exporter (overrides endpoint). |
agentId | string | — | Attribution label shown in the dashboard. |
sessionId | string | — | Group traces from related agents into a session. |
parentTraceId | string | — | Link this client’s traces to a spawning trace (cross-agent handoff). |
provider | string | spec default | Provider label stored on the span. |
captureContent | boolean | true | Capture prompt/response so Replay & judge work. Set false to keep content out of Lookspan entirely. Secrets are scrubbed server-side regardless. |
agentId, sessionId and parentTraceId are what power the
sessions & causality view;
captureContent is what enables replay and
LLM-as-judge.