ALL SYSTEMS LIVE·87 INSTRUMENTS · 19 VERTICALS
ED25519 · BITCOIN-ANCHORED·--:--:-- UTC
Home  /  Frameworks
FRAMEWORKS · KEYLESS REMOTE MCP

Drop live, verifiable data into your agent framework.

One keyless MCP endpoint, 87 signed tools. Copy-paste, verified recipes for nine frameworks — LangChain, the OpenAI Agents SDK, LlamaIndex, CrewAI, Pydantic-AI, Microsoft Agent Framework, Google ADK, Mastra and the Vercel AI SDK — all pointed at the same URL. The MCP server needs no key; only the LLM you drive does.

$ pick your framework connect an IDE instead
ONE ENDPOINT · EVERY FRAMEWORK

All nine speak MCP natively.

Every framework below has first-class MCP support — so connecting is just pointing it at the remote server https://dynamicfeed.ai/mcp (streamable HTTP, keyless) and loading its tools. Each recipe is verified against the framework's current release. Pick yours, copy, run.

◆ python · langchain / langgraph

LangChain & LangGraph

Use langchain-mcp-adaptersMultiServerMCPClient loads the remote tools as native LangChain tools for any agent or LangGraph node.

SHELL · installCOPY
pip install langchain-mcp-adapters langgraph "langchain[anthropic]"
PYTHON · connect + runCOPY
import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent

async def main():
    # Keyless remote MCP server over streamable HTTP — no auth, no local process.
    client = MultiServerMCPClient({
        "dynamicfeed": {
            "transport": "streamable_http",      # "http" / "streamable-http" also accepted
            "url": "https://dynamicfeed.ai/mcp",
        }
    })

    tools = await client.get_tools()             # all 87 tools as LangChain tools
    agent = create_react_agent("anthropic:claude-sonnet-4-6", tools)

    resp = await agent.ainvoke(
        {"messages": [{"role": "user", "content": "What is the weather in Sydney?"}]}
    )
    print(resp["messages"][-1].content)

if __name__ == "__main__":
    asyncio.run(main())
◆ python · llamaindex

LlamaIndex

Use llama-index-tools-mcpBasicMCPClient + McpToolSpec turn the remote server into a tool list for a FunctionAgent.

SHELL · installCOPY
pip install llama-index-tools-mcp llama-index-llms-openai llama-index-core
PYTHON · connect + runCOPY
import asyncio
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.openai import OpenAI

async def main():
    # A URL ending in /mcp auto-selects Streamable HTTP. Keyless.
    client = BasicMCPClient("https://dynamicfeed.ai/mcp")
    tools = await McpToolSpec(client=client).to_tool_list_async()   # 87 tools

    agent = FunctionAgent(
        tools=tools,
        llm=OpenAI(model="gpt-4.1"),             # set OPENAI_API_KEY
        system_prompt="You have live, verifiable data tools.",
    )
    print(str(await agent.run("What is the weather in Sydney?")))

if __name__ == "__main__":
    asyncio.run(main())
◆ python · crewai

CrewAI

Use crewai-tools[mcp]MCPServerAdapter discovers the remote tools and hands them to your Agent. Build and run the crew inside the with block.

SHELL · installCOPY
pip install 'crewai-tools[mcp]' crewai
PYTHON · connect + runCOPY
from crewai import Agent, Task, Crew, Process
from crewai_tools import MCPServerAdapter

# "transport" is a KEY inside the dict (not a kwarg). Keyless: no headers.
server_params = {"url": "https://dynamicfeed.ai/mcp", "transport": "streamable-http"}

with MCPServerAdapter(server_params, connect_timeout=60) as mcp_tools:
    agent = Agent(
        role="Live-data analyst",
        goal="Answer using fresh, verifiable data from Dynamic Feed.",
        backstory="Wired to a remote MCP feed of real-time, sourced data.",
        tools=mcp_tools,                         # all 87 tools (or filter by name)
        llm="anthropic/claude-opus-4-8",         # set ANTHROPIC_API_KEY
    )
    task = Task(
        description="Current weather in Sydney? Cite the source and timestamp.",
        expected_output="Conditions with source and measured_at.",
        agent=agent,
    )
    print(Crew(agents=[agent], tasks=[task], process=Process.sequential).kickoff())
◆ python · pydantic-ai

Pydantic-AI

Native MCP support — MCPServerStreamableHTTP is a toolset you attach straight to an Agent. Note the class name: one word, capital HTTP.

SHELL · installCOPY
pip install "pydantic-ai-slim[mcp]"
PYTHON · connect + runCOPY
import asyncio
from pydantic_ai import Agent
from pydantic_ai.mcp import MCPServerStreamableHTTP

# Keyless remote MCP server (87 tools) over Streamable HTTP.
server = MCPServerStreamableHTTP("https://dynamicfeed.ai/mcp")
agent = Agent("anthropic:claude-opus-4-8", toolsets=[server])

async def main():
    async with agent:                            # opens MCP connections once
        result = await agent.run("What is the weather in Sydney?")
        print(result.output)

if __name__ == "__main__":
    asyncio.run(main())
◆ typescript · vercel ai sdk (v6)

Vercel AI SDK

AI SDK v6: the MCP client moved to @ai-sdk/mcp (createMCPClient). Adapt the remote tools, then pass them to generateText.

SHELL · installCOPY
npm i ai @ai-sdk/mcp @ai-sdk/anthropic @modelcontextprotocol/sdk zod
TYPESCRIPT · connect + runCOPY
import { createMCPClient } from '@ai-sdk/mcp';
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
import { generateText, stepCountIs } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';

// Keyless remote streamable-HTTP transport — no headers needed.
const transport = new StreamableHTTPClientTransport(new URL('https://dynamicfeed.ai/mcp'));
const mcp = await createMCPClient({ transport });

try {
  const tools = await mcp.tools();               // adapts all 87 tools
  const { text } = await generateText({
    model: anthropic('claude-opus-4-8'),
    tools,
    stopWhen: stepCountIs(5),                     // allow multi-step tool calls
    prompt: 'Get the current AI model pricing and the latest CVEs.',
  });
  console.log(text);
} finally {
  await mcp.close();
}
◆ python · openai agents sdk

OpenAI Agents SDK

Native MCP support — MCPServerStreamableHttp as an async context manager; the SDK auto-lists the remote tools and hands them to your Agent.

SHELL · installCOPY
pip install openai-agents
PYTHON · connect + runCOPY
import asyncio
from agents import Agent, Runner
from agents.mcp import MCPServerStreamableHttp

async def main():
    # Keyless remote MCP over streamable HTTP — params needs only the URL.
    async with MCPServerStreamableHttp(
        name="Dynamic Feed",
        params={"url": "https://dynamicfeed.ai/mcp"},
        cache_tools_list=True,                   # cache the 87-tool list
    ) as df:
        agent = Agent(
            name="Assistant",
            instructions="Answer with fresh, verifiable data from Dynamic Feed.",
            model="gpt-4.1",                     # set OPENAI_API_KEY
            mcp_servers=[df],
        )
        result = await Runner.run(agent, "What is the weather in Sydney?")
        print(result.final_output)

if __name__ == "__main__":
    asyncio.run(main())
◆ python · microsoft agent framework

Microsoft Agent Framework

The unified AutoGen + Semantic Kernel successor — MCPStreamableHTTPTool attaches straight to a ChatAgent. (Pre-release: install with --pre.)

SHELL · installCOPY
pip install agent-framework --pre
PYTHON · connect + runCOPY
import asyncio
from agent_framework import ChatAgent, MCPStreamableHTTPTool
from agent_framework.openai import OpenAIChatClient

async def main():
    # Keyless remote MCP — just name + url, no headers.
    async with (
        MCPStreamableHTTPTool(name="Dynamic Feed", url="https://dynamicfeed.ai/mcp") as df,
        ChatAgent(
            chat_client=OpenAIChatClient(model_id="gpt-4o-mini"),   # set OPENAI_API_KEY
            name="LiveDataAgent",
            instructions="Answer with fresh, sourced data from Dynamic Feed.",
            tools=df,
        ) as agent,
    ):
        result = await agent.run("What is the current AQI in Sydney?")
        print(result.text)

if __name__ == "__main__":
    asyncio.run(main())
◆ python · google adk

Google ADK

Agent Development Kit — McpToolset with StreamableHTTPConnectionParams on the remote URL, attached to an LlmAgent (runs on Gemini).

SHELL · installCOPY
pip install google-adk
PYTHON · connect + runCOPY
import asyncio
from google.adk.agents import LlmAgent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.adk.tools.mcp_tool import McpToolset
from google.adk.tools.mcp_tool.mcp_session_manager import StreamableHTTPConnectionParams
from google.genai import types

# Keyless remote MCP over streamable HTTP — no headers.
toolset = McpToolset(
    connection_params=StreamableHTTPConnectionParams(url="https://dynamicfeed.ai/mcp")
)
agent = LlmAgent(
    model="gemini-flash-latest",                 # set GOOGLE_API_KEY
    name="dynamicfeed_agent",
    instruction="Answer using the live Dynamic Feed tools.",
    tools=[toolset],                             # auto-discovers all 87 tools
)

async def main():
    sessions = InMemorySessionService()
    await sessions.create_session(app_name="df", user_id="u1", session_id="s1")
    runner = Runner(app_name="df", agent=agent, session_service=sessions)
    msg = types.Content(role="user", parts=[types.Part(text="Weather in Sydney?")])
    async for ev in runner.run_async(user_id="u1", session_id="s1", new_message=msg):
        if ev.is_final_response() and ev.content:
            print(ev.content.parts[0].text)

if __name__ == "__main__":
    asyncio.run(main())
◆ typescript · mastra

Mastra

TypeScript — MCPClient with a bare url (tries Streamable HTTP, falls back to SSE); listTools() feeds the Agent.

SHELL · installCOPY
npm install @mastra/mcp @mastra/core
TYPESCRIPT · connect + runCOPY
import { MCPClient } from "@mastra/mcp";
import { Agent } from "@mastra/core/agent";

// Keyless remote MCP — a bare url tries Streamable HTTP first.
const mcp = new MCPClient({
  servers: { dynamicfeed: { url: new URL("https://dynamicfeed.ai/mcp") } },
});

const tools = await mcp.listTools();             // ~87 namespaced tools

const agent = new Agent({
  name: "Dynamic Feed Agent",
  instructions: "Answer using live Dynamic Feed tools; cite source + timestamp.",
  model: "openai/gpt-4o",                        // set OPENAI_API_KEY
  tools,
});

const res = await agent.generate("Latest published OpenAI model and its price?");
console.log(res.text);
await mcp.disconnect();
two things that save you 10 minutes

The server is keyless; your LLM is not. Connecting to https://dynamicfeed.ai/mcp needs no key or signup. The agent's model (Anthropic, OpenAI, …) still needs its own provider key — swap the model id in any snippet for whatever you have.

Transport spelling drifts by framework. LangChain wants streamable_http (underscore), CrewAI wants streamable-http (hyphen) as a dict key, Pydantic-AI uses the MCPServerStreamableHTTP class, and LlamaIndex infers it from the /mcp URL. The snippets above already use the correct form for each.

Loading all 87 tools is fine to start, but in production filter to the handful you need (each framework supports an allow-list) to keep the model's tool-selection prompt tight.

WHAT YOUR AGENT JUST GAINED

Live data it can verify.

87

live tools across 19 verticals — weather, GPS-integrity, CVEs, markets, maritime, space & more

Signed

every datapoint carries an Ed25519 signature + provenance (source, licence, timestamp) anyone can re-check

Keyless

no signup to connect or use the free tier — point your framework at the endpoint and go

Each tool response carries a signature block over its exact bytes. See how to check one at /proof, browse every tool at /feeds, or read the full reference in the docs.

what "signed & verifiable" means

Signing gives you proof-of-existence-at-a-time and tamper-evidence — that a datapoint existed, unchanged, at a moment in time, checkable by anyone without trusting us. It is not a claim that an upstream value is true, and nothing here is a safety or financial guarantee. We make the record independently verifiable; the rest is on the source.

WIRED IN?

Now give your agent the real world.

Browse all 87 tools, connect an IDE in one click, or verify a signature yourself.

$ browse the tools one-click IDE install