"""LangChain agent with live UK procurement data via the Oro Intel remote MCP server."""
import asyncio
import os
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.prebuilt import create_react_agent
ORO_API_KEY = os.environ["ORO_API_KEY"] # https://app.oro-intel.com/dashboard/developers
client = MultiServerMCPClient(
{
"oro-intel": {
"transport": "streamable_http",
"url": "https://api.oro-intel.com/mcp/", # trailing slash required
"headers": {"Authorization": f"Bearer {ORO_API_KEY}"},
}
}
)
async def main() -> None:
tools = await client.get_tools()
agent = create_react_agent("anthropic:claude-sonnet-5", tools)
result = await agent.ainvoke(
{
"messages": [
(
"user",
"Look up the UK company 'Serco' and give me its full supplier "
"profile. Report how many public contracts it has won, and the "
"credits_charged and credits_remaining from the tool responses.",
)
]
}
)
print(result["messages"][-1].content)
asyncio.run(main())
Expected output
output (trimmed)
Serco Limited (company number 02048608) has won 132 public contracts.
The lookup cost 5 credits and the full profile 12 credits
(credits_charged: 12, credits_remaining: 233).
The agent calls oro_lookup_company (5 credits) then oro_company_profile (12 credits). Every tool response includes credits_charged/credits_remaining, and each tool's description states its cost, so the agent knows before it calls.