DEV Community

Semurg
Semurg

Posted on Originally published at one.semurg.io

Give your LangChain, LlamaIndex, CrewAI, Google ADK, Hermes or OpenClaw agent a memory, one connection each

Most agent frameworks give an agent a chat history and call it memory. When the process ends, it is gone. When two agents work on the
same project, they know nothing about each other.

Semurg gives every agent the same long-term memory, on your own machine, over MCP. Each agent stores the people, decisions and
documents it finds as a knowledge graph. Any agent on the same scope can later ask for them, and every answer cites where it came from.
One node serves them all, so a CrewAI crew can read what your LangChain agent stored this morning.

Start a node

It runs on Linux (x86-64); the first node is free:

curl -fsSL https://one.semurg.io/install | sudo bash
export SEMURG_API_TOKEN="$(sudo grep '^SEMURG_API_TOKEN=' /etc/semurg/semurg.env | cut -d= -f2-)"
Enter fullscreen mode Exit fullscreen mode

Every snippet below reads the token from that variable and talks to http://127.0.0.1:4000/v1/mcp.

LangChain / LangGraph

pip install langchain-mcp-adapters
Enter fullscreen mode Exit fullscreen mode
import asyncio, os
from langchain_mcp_adapters.client import MultiServerMCPClient

HEADERS = {"Authorization": "Bearer " + os.environ["SEMURG_API_TOKEN"], "X-Semurg-Scope": "default"}
FACTS = {"entities": [{"name": "Ada", "type": "person"}, {"name": "Acme", "type": "organisation"}],
         "relations": [{"source": "Ada", "target": "Acme", "type": "WORKS_AT"}]}

async def main():
    client = MultiServerMCPClient({"semurg": {"url": "http://127.0.0.1:4000/v1/mcp",
                                              "transport": "streamable_http", "headers": HEADERS}})
    tools = {t.name: t for t in await client.get_tools()}
    await tools["memory_remember"].ainvoke({"facts": FACTS})
    print(await tools["memory_recall"].ainvoke({"subject": "Ada"}))

asyncio.run(main())
Enter fullscreen mode Exit fullscreen mode

Bind the same tools into your LangGraph agent and it stores and recalls on its own.

The blocks below are shortened and reuse HEADERS and FACTS from this one. The complete, runnable file for each is on
https://one.semurg.io/agents.

CrewAI

pip install 'crewai-tools[mcp]'
Enter fullscreen mode Exit fullscreen mode
from crewai_tools import MCPServerAdapter
params = {"url": "http://127.0.0.1:4000/v1/mcp", "transport": "streamable-http", "headers": HEADERS}
with MCPServerAdapter(params, connect_timeout=60) as tools:
    by = {t.name: t for t in tools}
    by["memory_remember"].run(facts=FACTS)
    print(by["memory_recall"].run(subject="Ada"))
Enter fullscreen mode Exit fullscreen mode

LlamaIndex

pip install llama-index-tools-mcp
Enter fullscreen mode Exit fullscreen mode
import asyncio
from llama_index.tools.mcp import BasicMCPClient, McpToolSpec

async def main():
    client = BasicMCPClient("http://127.0.0.1:4000/v1/mcp", headers=HEADERS)
    by = {t.metadata.name: t for t in await McpToolSpec(client=client).to_tool_list_async()}
    await by["memory_remember"].acall(facts=FACTS)
    print(await by["memory_recall"].acall(subject="Ada"))

asyncio.run(main())
Enter fullscreen mode Exit fullscreen mode

Google ADK

pip install google-adk 'mcp<2'
Enter fullscreen mode Exit fullscreen mode
from google.adk.tools.mcp_tool.mcp_toolset import McpToolset, StreamableHTTPConnectionParams
toolset = McpToolset(connection_params=StreamableHTTPConnectionParams(url="http://127.0.0.1:4000/v1/mcp", headers=HEADERS))
Enter fullscreen mode Exit fullscreen mode

Put toolset in your agent's tools.

Hermes Agent and OpenClaw

Hermes takes one entry under mcp_servers in ~/.hermes/config.yaml, with the token in ~/.hermes/.env. OpenClaw takes one command:

openclaw mcp set semurg '{"url":"http://127.0.0.1:4000/v1/mcp","transport":"streamable-http","headers":{"Authorization":"Bearer ${SEMURG_API_TOKEN}","X-Semurg-Scope":"default"}}'
openclaw mcp doctor semurg --probe
Enter fullscreen mode Exit fullscreen mode

How we know these work

We run every one of these against our published releases.

  • The libraries run end to end: remember, recall, relate, recall again, forget, each answer read back.
  • For Hermes, OpenClaw and Claude Code, the agent's own MCP client must list every memory tool the node serves.

Each result, with the release and the package versions it ran on, is at https://one.semurg.io/agents. Full guides for Hermes and
OpenClaw are on our blog: https://one.semurg.io/blog/semurg-memory-for-hermes-agent

Drafted with an AI assistant (Claude); every snippet is taken from our published agents page (shortened here; the full files are there).

Top comments (0)