memra
Persistent memory for AI agents. EU-hosted, privacy-first, hybrid recall, contradiction detection.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"memra": {
"url": "https://usememra.com/mcp"
}
}
}원격 엔드포인트
https://usememra.com/mcpstreamable-http할 수 있는 일
도구 목록
도구 (7)
⚪memra_remember(content, namespace, type, importance, tags, ...)
Store one or many memories in Memra. Single mode: pass content + namespace. Decision mode: pass type=decision with content + namespace (optionally context). Pattern mode: pass type=pattern with title + steps + namespace. Bulk mode: pass entries[]. If the response contains conflicts[], the new fact contradicts those existing memories — review them and use memra_supersede on the outdated one instead of leaving both active.
입력 스키마
{
"type": "object",
"properties": {
"content": {
"type": "string",
"maxLength": 10000,
"description": "Single/decision mode: memory content. Required unless using entries[] or pattern mode."
},
"namespace": {
"type": "string",
"description": "Tenant namespace. Required for single, decision, and pattern modes."
},
"type": {
"type": "string",
"enum": [
"fact",
"event",
"pattern",
"working",
"decision",
"preference",
"context",
"entity",
"reference"
],
"default": "fact",
"description": "Memory type; use decision for decision mode and pattern for pattern mode."
},
"importance": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 5
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"metadata": {
"type": "object"
},
"mask": {
"type": "boolean",
"default": false
},
"project_id": {
"type": "string",
"description": "Project ID (required if account has multiple projects)"
},
"entries": {
"type": "array",
"items": {
"type": "object"
},
"description": "Bulk mode: array of memory entries (max 25). When provided, the server routes to batch create."
},
"context": {
"type": "string",
"description": "Decision mode: reasoning/context for the decision."
},
"steps": {
"type": "array",
"items": {
"type": "string"
},
"description": "Pattern mode: ordered steps. Required with title when type=pattern."
},
"gotchas": {
"type": "array",
"items": {
"type": "string"
},
"description": "Pattern mode: common pitfalls."
},
"verify_checklist": {
"type": "array",
"items": {
"type": "string"
},
"description": "Pattern mode: verification checklist."
},
"title": {
"type": "string",
"description": "Pattern mode: title. Required with steps when type=pattern."
}
}
}출력 스키마
{
"type": "object",
"oneOf": [
{
"type": "object",
"properties": {
"memory_id": {
"type": "string"
},
"action": {
"type": "string",
"enum": [
"created",
"duplicate_found"
]
},
"type": {
"type": "string"
},
"namespace": {
"type": "string"
},
"project_id": {
"type": "string"
},
"revision": {
"type": "integer",
"description": "Read-your-writes token — pass to memra_recall as wait_for_revision to guarantee this write is searchable."
},
"embedding_status": {
"type": "string",
"enum": [
"pending",
"complete",
"failed"
]
},
"conflicts": {
"type": "array",
"description": "Existing memories this new fact contradicts (NLI-scored). Review each and memra_supersede the outdated one.",
"items": {
"type": "object",
"properties": {
"memory_id": {
"type": "string"
},
"preview": {
"type": "string"
},
"confidence": {
"type": "number"
}
},
"required": [
"memory_id",
"preview",
"confidence"
]
}
}
},
"required": [
"memory_id",
"action"
]
},
{
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"created": {
"type": "integer"
},
"results": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"total",
"created",
"results"
]
}
]
}🟢memra_recall(query, namespace, type, min_confidence, limit, ...)
Search memories in Memra by semantic similarity. Returns ranked results by relevance. Replaces memra_search.
입력 스키마
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query for semantic matching"
},
"namespace": {
"type": "string",
"description": "Tenant namespace to search within"
},
"type": {
"type": "string",
"enum": [
"fact",
"event",
"pattern",
"working",
"decision",
"preference",
"context",
"entity",
"reference"
],
"description": "Filter by memory type"
},
"min_confidence": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Minimum confidence score"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10,
"description": "Max results to return"
},
"project_id": {
"type": "string",
"description": "Filter by project ID"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by tags"
},
"wait_for_revision": {
"type": "integer",
"minimum": 0,
"description": "Read-your-writes: pass the revision returned by memra_remember to block (max 5s) until that write is indexed and searchable. Use when recalling something you just stored."
},
"max_tokens": {
"type": "integer",
"minimum": 100,
"description": "Token budget: return the best-scoring results that fit within this many tokens (chars/4 heuristic). Combine with a higher limit to fill the budget."
},
"not_tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exclude memories carrying any of these tags."
},
"since": {
"type": "string",
"description": "Only memories created at or after this ISO-8601 date."
},
"until": {
"type": "string",
"description": "Only memories created at or before this ISO-8601 date."
},
"used_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Feedback: memory IDs from your PREVIOUS recall that you actually used. They gain a small permanent ranking boost — pass these every time to make recall learn."
}
},
"required": [
"query",
"namespace"
]
}출력 스키마
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"memory_id": {
"type": "string"
},
"uri": {
"type": "string"
},
"excerpt": {
"type": "string"
},
"content": {
"type": "string"
},
"score": {
"type": "number"
},
"type": {
"type": [
"string",
"null"
]
},
"importance": {
"type": [
"integer",
"null"
]
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"created_at": {
"type": [
"string",
"null"
]
},
"content_origin": {
"type": [
"string",
"null"
]
},
"trust_state": {
"type": "string"
},
"full_content_available": {
"type": "boolean"
},
"untrusted_content": {
"type": "boolean"
},
"content_classification": {
"type": "string"
},
"staleness_score": {
"type": [
"integer",
"null"
],
"description": "0 (fresh) to 100 (critical). High values mean the memory may be outdated — verify before relying on it."
},
"staleness_status": {
"type": [
"string",
"null"
],
"enum": [
"fresh",
"aging",
"stale",
"critical",
null
]
},
"last_confirmed": {
"type": [
"string",
"null"
],
"description": "When this memory was last written or refreshed."
}
},
"required": [
"id",
"uri",
"excerpt",
"score",
"trust_state",
"untrusted_content"
]
}
},
"total_candidates": {
"type": "integer"
},
"estimated_tokens": {
"type": "integer"
}
},
"required": [
"results",
"total_candidates"
]
}🟢memra_get(memory_id)
Get a single memory by ID with full content. Use when you need the complete text of a memory (search results are truncated).
입력 스키마
{
"type": "object",
"properties": {
"memory_id": {
"type": "string",
"description": "The memory ID to retrieve"
}
},
"required": [
"memory_id"
]
}출력 스키마
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"uri": {
"type": "string"
},
"type": {
"type": "string"
},
"importance": {
"type": [
"integer",
"null"
]
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"content": {
"type": "string"
},
"metadata": {
"type": [
"object",
"array",
"null"
]
},
"project_id": {
"type": [
"string",
"null"
]
},
"namespace": {
"type": [
"string",
"null"
]
},
"content_origin": {
"type": [
"string",
"null"
]
},
"trust_state": {
"type": "string"
},
"verified_by": {
"type": [
"string",
"null"
]
},
"verification_method": {
"type": [
"string",
"null"
]
},
"untrusted_content": {
"type": "boolean"
},
"content_classification": {
"type": "string"
},
"created_at": {
"type": [
"string",
"null"
]
},
"updated_at": {
"type": [
"string",
"null"
]
}
},
"required": [
"id",
"uri",
"type",
"content",
"trust_state",
"untrusted_content"
]
}🟢memra_list(namespace, type, tags, limit, offset, ...)
List memories in Memra for a namespace. Returns paginated results with filtering options.
입력 스키마
{
"type": "object",
"properties": {
"namespace": {
"type": "string",
"description": "Tenant namespace"
},
"type": {
"type": "string",
"enum": [
"fact",
"event",
"pattern",
"working",
"decision",
"preference",
"context",
"entity",
"reference"
],
"description": "Filter by memory type"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by tags"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 20,
"description": "Max results"
},
"offset": {
"type": "integer",
"default": 0,
"description": "Pagination offset"
},
"project_id": {
"type": "string",
"description": "Filter by project ID"
},
"min_importance": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Minimum importance"
}
},
"required": [
"namespace"
]
}출력 스키마
{
"type": "object",
"properties": {
"memories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"importance": {
"type": "integer"
},
"tags": {
"type": "array",
"items": {
"type": "string"
}
},
"created_at": {
"type": "string"
}
},
"required": [
"id",
"type"
]
}
},
"total": {
"type": "integer"
}
},
"required": [
"memories",
"total"
]
}🟡memra_supersede(memory_id, content, importance, tags, metadata)
Replace a memory with new content. The old memory is marked superseded and stops appearing in search; the new memory inherits the old memory's type, importance, tags, source and metadata unless overridden. Works for all memory types (use this instead of memra_add when you are correcting or updating existing knowledge).
입력 스키마
{
"type": "object",
"properties": {
"memory_id": {
"type": "string",
"description": "ID of the memory to supersede"
},
"content": {
"type": "string",
"maxLength": 10000,
"description": "New content that replaces the old memory"
},
"importance": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"description": "Override importance (defaults to old memory's importance)"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Override tags (defaults to old memory's tags)"
},
"metadata": {
"type": "object",
"description": "Override metadata (defaults to old memory's metadata)"
}
},
"required": [
"memory_id",
"content"
]
}출력 스키마
{
"type": "object",
"properties": {
"new_memory_id": {
"type": "string"
},
"superseded_memory_id": {
"type": "string"
},
"type": {
"type": "string"
},
"revision": {
"type": "integer",
"description": "Read-your-writes token — pass to memra_recall as wait_for_revision."
},
"embedding_status": {
"type": "string",
"enum": [
"pending",
"complete",
"failed"
]
}
},
"required": [
"new_memory_id",
"superseded_memory_id",
"type"
]
}🟡memra_history(memory_id)
View the full supersession chain for a memory (oldest to newest). Use this when you need to audit how a fact or decision evolved over time — e.g., the user asks "why did we change X?", you need to understand prior reasoning before proposing another change, or you spotted a superseded_by reference and need the full timeline. Given any memory ID in the chain, returns every predecessor and successor.
입력 스키마
{
"type": "object",
"properties": {
"memory_id": {
"type": "string",
"description": "Any memory ID in the chain"
}
},
"required": [
"memory_id"
]
}출력 스키마
{
"type": "object",
"properties": {
"chain": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string"
},
"status": {
"type": "string"
},
"superseded_by": {
"type": [
"string",
"null"
]
},
"created_at": {
"type": "string"
}
},
"required": [
"id",
"type",
"status"
]
}
},
"length": {
"type": "integer"
}
},
"required": [
"chain",
"length"
]
}⚪memra_bootstrap(namespace, agent_id, max_tokens, include_types, exclude_types, ...)
Load agent bootstrap context from Memra. Returns priority-ordered memories for agent session initialization.
입력 스키마
{
"type": "object",
"properties": {
"namespace": {
"type": "string",
"description": "Tenant namespace"
},
"agent_id": {
"type": "string",
"description": "Agent identifier, defaults to API key ID"
},
"max_tokens": {
"type": "integer",
"default": 500,
"description": "Token budget for bootstrap payload"
},
"include_types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Only include these memory types"
},
"exclude_types": {
"type": "array",
"items": {
"type": "string"
},
"description": "Exclude these memory types"
},
"recency_days": {
"type": "integer",
"default": 7,
"description": "Include context from last N days"
},
"project_id": {
"type": "string",
"description": "Project ID (required if account has multiple projects)"
}
},
"required": [
"namespace"
]
}출력 스키마
{
"type": "object",
"properties": {
"memories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"uri": {
"type": "string"
},
"content_origin": {
"type": [
"string",
"null"
]
},
"untrusted_content": {
"type": "boolean"
},
"content_classification": {
"type": "string"
},
"trust_state": {
"type": "string"
}
},
"required": [
"uri",
"untrusted_content",
"content_classification"
]
}
},
"token_estimate": {
"type": "integer"
},
"health_warnings": {
"type": "array",
"items": {
"type": "object"
}
},
"revision": {
"type": "integer"
}
},
"required": [
"memories",
"token_estimate"
]
}커뮤니티
증거