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.
Related Pages
Other pages in the docs that reference this one: