# Agent frameworks

Connect OSINTverse to agents you build with the Claude Agent SDK, the OpenAI Agents SDK, LangChain, or n8n, and find the server by discovery.

URL: https://osintverse.com/docs/mcp/frameworks

Every framework below talks to the same remote MCP server, `https://osintverse.com/mcp`, with an `ov_` API key as a bearer token. Create the key under [Dashboard → API keys](https://osintverse.com/dashboard/api).

> **API keys are always live.** A key bills its wallet on every paid call, with no sandbox. While you build, point the agent at the no-account demo endpoint `https://osintverse.com/mcp/demo` (no header, sample data, never charged), or leave the paid tools (`run_search`, `run_bulk_search`) out of the allowed list until the workflow looks right. The workspace daily cap still applies to keys.

## Claude Agent SDK

**TypeScript**

```ts title="investigate.ts"
import { query } from "@anthropic-ai/claude-agent-sdk"

for await (const message of query({
  prompt: "Quote a LeakRadar email lookup for user@example.com. Run it only if it costs under $2, then summarise.",
  options: {
    mcpServers: {
      osintverse: {
        type: "http",
        url: "https://osintverse.com/mcp",
        headers: { Authorization: `Bearer ${process.env.OSINTVERSE_API_KEY}` },
      },
    },
    allowedTools: [
      "mcp__osintverse__whoami",
      "mcp__osintverse__list_providers",
      "mcp__osintverse__quote_search",
      "mcp__osintverse__run_search",
      "mcp__osintverse__get_search",
    ],
  },
})) {
  if (message.type === "result" && message.subtype === "success") console.log(message.result)
}
```

**Python**

```python title="investigate.py"
import asyncio, os
from claude_agent_sdk import ClaudeAgentOptions, ResultMessage, query

options = ClaudeAgentOptions(
    mcp_servers={
        "osintverse": {
            "type": "http",
            "url": "https://osintverse.com/mcp",
            "headers": {"Authorization": f"Bearer {os.environ['OSINTVERSE_API_KEY']}"},
        }
    },
    allowed_tools=[
        "mcp__osintverse__whoami",
        "mcp__osintverse__list_providers",
        "mcp__osintverse__quote_search",
        "mcp__osintverse__run_search",
        "mcp__osintverse__get_search",
    ],
)

async def main():
    async for message in query(
        prompt="Quote a LeakRadar email lookup for user@example.com. Run it only if it costs under $2, then summarise.",
        options=options,
    ):
        if isinstance(message, ResultMessage):
            print(message.result)

asyncio.run(main())
```

Tool names follow `mcp__osintverse__<tool>`. The full list is in the [tool reference](https://osintverse.com/docs/mcp/tools).

## Claude API

The Messages API connects to the server with the MCP connector, no SDK process needed. See the **Messages API** tab in [Connect an agent](https://osintverse.com/docs/mcp/setup).

## OpenAI Agents SDK

```python title="investigate.py"
import asyncio, os
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp

async def main():
    async with MCPServerStreamableHttp(
        name="osintverse",
        params={
            "url": "https://osintverse.com/mcp",
            "headers": {"Authorization": f"Bearer {os.environ['OSINTVERSE_API_KEY']}"},
        },
        cache_tools_list=True,
    ) as osintverse:
        agent = Agent(
            name="Investigator",
            instructions="Always call quote_search before run_search and stay under the budget the user gives.",
            mcp_servers=[osintverse],
        )
        result = await Runner.run(agent, "What do breach sources hold for user@example.com? Budget $2.")
        print(result.final_output)

asyncio.run(main())
```

## LangChain and LangGraph

```python title="investigate.py"
import asyncio, os
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient

async def main():
    client = MultiServerMCPClient({
        "osintverse": {
            "transport": "streamable_http",
            "url": "https://osintverse.com/mcp",
            "headers": {"Authorization": f"Bearer {os.environ['OSINTVERSE_API_KEY']}"},
        }
    })
    tools = await client.get_tools()
    agent = create_agent("anthropic:claude-opus-5-5", tools)
    result = await agent.ainvoke({"messages": [{"role": "user", "content": "Quote, then run, a LeakRadar lookup for user@example.com."}]})
    print(result["messages"][-1].content)

asyncio.run(main())
```

## n8n

1. Add an **AI Agent** node and attach an **MCP Client Tool** to its tools input.
2. Set **Endpoint** to `https://osintverse.com/mcp` and **Server Transport** to **HTTP Streamable**.
3. Set **Authentication** to **Bearer Auth** and store the `ov_` key as the credential.
4. Under **Tools to Include** choose **Selected** and start with the read tools (`whoami`, `list_providers`, `quote_search`, `get_search`) before adding `run_search`.

## Plain HTTP and other languages

Any client that speaks MCP streamable HTTP works the same way: `POST https://osintverse.com/mcp` with `Authorization: Bearer ov_...`. Without MCP, the [REST API](https://osintverse.com/docs/api/overview) offers the same searches; its OpenAPI spec is at [`https://osintverse.com/openapi.json`](https://osintverse.com/openapi.json).

## Discovery

Agents and registries can find the server without being told the URL:

| Document                 | URL                                                                       |
| ------------------------ | ------------------------------------------------------------------------- |
| MCP Server Card          | `https://osintverse.com/mcp/server-card`                                  |
| AI Catalog               | `https://osintverse.com/.well-known/ai-catalog.json`                      |
| API catalog (RFC 9727)   | `https://osintverse.com/.well-known/api-catalog`                          |
| OAuth protected resource | `https://osintverse.com/.well-known/oauth-protected-resource/mcp`         |
| OpenAPI                  | `https://osintverse.com/openapi.json`                                     |
| Pricing as JSON          | `https://osintverse.com/pricing.json`                                     |
| Docs for LLMs            | `https://osintverse.com/llms.txt`, `https://osintverse.com/llms-full.txt` |

In the official MCP Registry the server is `com.osintverse/mcp`.

- [Get an API key](https://osintverse.com/dashboard/api)
- [OpenAPI spec](https://osintverse.com/openapi.json) and [Swagger UI](https://apiv1.osintverse.com/docs)
- [API sandbox (free, mock data)](https://osintverse.com/developers/sandbox)
- [Pricing](https://osintverse.com/pricing.json)
