Reference
Build with Engrammic
Integrate memory into your own agents
Endpoint
Beta MCP endpoint: https://beta.engrammic.ai/mcp/
Authentication
Engrammic uses OAuth. Your agent triggers a browser-based flow:
- Agent calls the MCP endpoint without a token
- Server returns an OAuth URL
- User opens URL in browser, authenticates
- Agent receives token via callback
- Subsequent calls include the token
Token refresh is automatic. If a token expires mid-session, the server returns AUTH_REQUIRED and you re-trigger the flow.
MCP Client Setup
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
const transport = new StreamableHTTPClientTransport(
new URL("https://beta.engrammic.ai/mcp/")
);
const client = new Client({
name: "my-agent",
version: "1.0.0"
});
await client.connect(transport);
// Store an observation
await client.callTool("remember", {
content: "User prefers dark mode",
context: "stated in settings discussion"
});
// Retrieve knowledge
const result = await client.callTool("recall", {
query: "user preferences"
});from mcp import Client
from mcp.client.streamable_http import StreamableHTTPClientTransport
import asyncio
async def main():
transport = StreamableHTTPClientTransport("https://beta.engrammic.ai/mcp/")
client = Client("my-agent", "1.0.0")
await client.connect(transport)
# Store an observation
await client.call_tool("remember", {
"content": "User prefers dark mode",
"context": "stated in settings discussion"
})
# Retrieve knowledge
result = await client.call_tool("recall", {
"query": "user preferences"
})
asyncio.run(main())Core Operations
Store an observation:
{"tool": "remember", "args": {"content": "...", "context": "..."}}Store a claim with evidence:
{"tool": "learn", "args": {"claim": "...", "evidence": [{"type": "direct_statement", "content": "..."}]}}Retrieve knowledge:
{"tool": "recall", "args": {"query": "..."}}Trace provenance:
{"tool": "trace", "args": {"query": "why do you believe X?"}}Error Handling
Errors return:
{"error": {"code": "ERROR_CODE", "message": "Human-readable message"}}| Code | Meaning | Action |
|---|---|---|
AUTH_REQUIRED | Token missing or expired | Re-trigger OAuth flow |
INVALID_TOKEN | Token rejected | Re-authenticate |
SILO_NOT_FOUND | Silo doesn't exist | Check silo_id config |
NODE_NOT_FOUND | Referenced node missing | Node was deleted or ID is wrong |
RATE_LIMITED | Too many requests | Back off, retry with exponential backoff |
VALIDATION_ERROR | Bad parameters | Check required fields |
Rate Limits
Beta limits (subject to change):
- 100 requests per minute per silo
- 10,000 nodes per silo
Coming Soon
Native TypeScript and Python SDKs are in development. For now, use the MCP SDK directly as shown above.