LIVE STATUS: /uptime·CURRENT PUBLIC CATALOGUE
DATA WITH RECEIPTS · ED25519 · RFC 3161·--:--:-- UTC
Home  /  Frameworks
FRAMEWORKS · KEYLESS REMOTE MCP

Drop live, verifiable data into your agent framework.

One keyless MCP service, with a full public catalogue and focused collections. Copy-paste recipes for nine frameworks, all using the same Streamable HTTP transport. The MCP service needs no key; only the LLM you drive does.

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.

full catalogue or focused collection

Keep https://dynamicfeed.ai/mcp when an agent needs the full public catalogue. For a narrower job, replace the URL in any recipe with /mcp/security, /mcp/weather, /mcp/space, /mcp/infrastructure, /mcp/ai-models or /mcp/evidence.

Why scope it? A smaller catalogue sends fewer tool descriptions into the model context. That can reduce prompt-token use and tool-selection ambiguity. Every collection is an allow-listed filter over the canonical registry, not a copied server.

◆ python · langchain / langgraph

LangChain & LangGraph

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

SHELL · install
pip install langchain-mcp-adapters langgraph "langchain[anthropic]"
PYTHON · connect + run
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()             # full public catalogue
    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-mcp, BasicMCPClient + McpToolSpec turn the remote server into a tool list for a FunctionAgent.

SHELL · install
pip install llama-index-tools-mcp llama-index-llms-openai llama-index-core
PYTHON · connect + run
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()   # full catalogue

    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 · install
pip install 'crewai-tools[mcp]' crewai
PYTHON · connect + run
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,                         # full catalogue (or use a collection URL)
        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 · install
pip install "pydantic-ai-slim[mcp]"
PYTHON · connect + run
import asyncio
from pydantic_ai import Agent
from pydantic_ai.mcp import MCPServerStreamableHTTP

# Keyless remote MCP server 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 · install
npm i ai @ai-sdk/mcp @ai-sdk/anthropic @modelcontextprotocol/sdk zod
TYPESCRIPT · connect + run
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 the full public catalogue
  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 · install
pip install openai-agents
PYTHON · connect + run
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 discovered catalogue
    ) 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 · install
pip install agent-framework --pre
PYTHON · connect + run
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 · install
pip install google-adk
PYTHON · connect + run
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 the public catalogue
)

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 · install
npm install @mastra/mcp @mastra/core
TYPESCRIPT · connect + run
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();             // namespaced public catalogue

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.

Use the full catalogue to explore; scope production agents where practical. A collection URL applies a centrally maintained allow-list before tool discovery, so the model receives only the relevant tool descriptions.

WHAT YOUR AGENT JUST GAINED

Live data it can verify.

Broad

a current public catalogue across weather, GPS integrity, CVEs, maritime, space and more

Signed

successful responses carry provenance and a signed integrity envelope that anyone can check

Keyless

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

A successful tool response carries source and timing metadata plus a signed integrity envelope. See how to check one at /proof, browse the current catalogue at /feeds, or read the full reference in the docs.

what response verification means

A valid signature confirms response integrity and issuer identity. Source accuracy must still be evaluated under the applicable trust policy. Independent time evidence is shown only when a separate timestamp proof has actually been validated.

USE-CASE RECIPES

Two calls your agent can prove later.

Beyond reading live data, agents leave evidence with two endpoints: /v1/facts returns any reading in one canonical, signed shape, and /v1/anchor time-stamps a hash of it with an independent RFC 3161 authority. Hashes only, never your data.

SHELL · SEBI algo trace-to-source → POST /v1/anchor
# Sign + RFC 3161 timestamp the exact market reading your algo acted on.
# You pass the reading; only its SHA-256 is timestamped (hashes only, never data).
curl -s -X POST https://dynamicfeed.ai/v1/anchor \
  -H 'Content-Type: application/json' \
  -d '{"snapshot":{"order_id":"NSE-2026-0001","instrument":"RELIANCE",
                   "price":2945.5,"acted_at":"2026-06-28T06:30:00Z"}}'
# -> {"digest_sha256":"d690e787…","tsa":"rfc3161","status":"confirmed",
#     "timestamp_token_b64":"…","signature":{…}}   # independently verifiable later

India's trace-to-source rule (mandatory from 1 April 2026) means proving the exact datapoint an order acted on. Dynamic Feed is the neutral third party that signs and timestamps it, independent of the desk. See the worked demo at SEBI algo evidence. We witness the datapoint; we never supply the price or touch the order.

SHELL · AI-decision evidence → GET /v1/facts then POST /v1/anchor
# 1) Capture the external input your decision used, as one signed, canonical fact.
curl -s "https://dynamicfeed.ai/v1/facts?tool=current_weather&city=Mumbai&country=IN"

# 2) Timestamp that fact's hash so the record holds up in discovery months later.
curl -s -X POST https://dynamicfeed.ai/v1/anchor \
  -H 'Content-Type: application/json' \
  -d '{"snapshot":{"fact":"current_weather","city":"Mumbai",
                   "value":31.2,"unit":"C","at":"2026-06-28T06:30:00Z"}}'

When an automated decision is contested, the question is what data it acted on, and when. An engine cannot witness itself; Dynamic Feed is the independent party that signs and timestamps the external data, re-checkable by a court or a regulator. See AI decision evidence.

the boundary

Dynamic Feed is an independent evidence layer, not legal advice and not a compliance certification of anyone's AI or trading. Signing and timestamping prove a record existed unchanged at a time, they do not prove the value is objectively true. We never supply finance prices, place or execute trades, or touch the money path. Treat it as one independent, verifiable input.

WIRED IN?

Now give your agent the real world.

Browse the current public catalogue, connect an IDE in one click, or verify a signature yourself.

Access policy

InterfaceEndpointAccessUseLimit
MCP/mcpKeylessPublic read-only accessNo per-key quota; subject to service availability
REST batch/v1/batchKeylessTesting and low-volume read-only batch accessMaximum 20 calls per request
Direct RESTDocumented keyed routesX-API-KeyDirect endpoint access with usage accountingPlan quota applies
x402/v1/pro/*x402 paymentMachine-paid access on eligible premium endpointsPer-call terms are returned with HTTP 402
Enterprise/enterpriseCommercial termsDiscuss operating, support, and integration requirementsPublished or agreed service terms apply