[{"data":1,"prerenderedAt":1070},["ShallowReactive",2],{"navigation_docs":3,"-docs-mcp-memory-server":356,"-docs-mcp-memory-server-surround":1065},[4,8,34,64,90,139,157,171,193,227,241,266,312,334],{"title":5,"path":6,"stem":7},"Documentation","\u002Fdocs","docs\u002Findex",{"title":9,"path":10,"stem":11,"children":12},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started\u002Findex",[13,14,18,22,26,30],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F01.getting-started\u002F01.introduction",{"title":19,"path":20,"stem":21},"Concepts","\u002Fdocs\u002Fgetting-started\u002Fconcepts","docs\u002F01.getting-started\u002F02.concepts",{"title":23,"path":24,"stem":25},"Quickstart (5 minutes)","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F01.getting-started\u002F03.quickstart",{"title":27,"path":28,"stem":29},"Local development","\u002Fdocs\u002Fgetting-started\u002Flocal-development","docs\u002F01.getting-started\u002F04.local-development",{"title":31,"path":32,"stem":33},"FAQ","\u002Fdocs\u002Fgetting-started\u002Ffaq","docs\u002F01.getting-started\u002F05.faq",{"title":35,"path":36,"stem":37,"children":38},"Architecture","\u002Fdocs\u002Farchitecture","docs\u002F02.architecture\u002Findex",[39,40,44,48,52,56,60],{"title":35,"path":36,"stem":37},{"title":41,"path":42,"stem":43},"Architecture overview","\u002Fdocs\u002Farchitecture\u002Foverview","docs\u002F02.architecture\u002F01.overview",{"title":45,"path":46,"stem":47},"Services","\u002Fdocs\u002Farchitecture\u002Fservices","docs\u002F02.architecture\u002F02.services",{"title":49,"path":50,"stem":51},"Request lifecycle","\u002Fdocs\u002Farchitecture\u002Frequest-lifecycle","docs\u002F02.architecture\u002F03.request-lifecycle",{"title":53,"path":54,"stem":55},"Data model","\u002Fdocs\u002Farchitecture\u002Fdata-model","docs\u002F02.architecture\u002F04.data-model",{"title":57,"path":58,"stem":59},"Status and evidence","\u002Fdocs\u002Farchitecture\u002Fstatus-and-evidence","docs\u002F02.architecture\u002F05.status-and-evidence",{"title":61,"path":62,"stem":63},"Target architecture and authority","\u002Fdocs\u002Farchitecture\u002Ftarget-architecture","docs\u002F02.architecture\u002F06.target-architecture",{"title":65,"path":66,"stem":67,"children":68},"Auth","\u002Fdocs\u002Fauth","docs\u002F03.auth\u002Findex",[69,70,74,78,82,86],{"title":65,"path":66,"stem":67},{"title":71,"path":72,"stem":73},"Overview","\u002Fdocs\u002Fauth\u002Foverview","docs\u002F03.auth\u002F01.overview",{"title":75,"path":76,"stem":77},"Organization and agent model","\u002Fdocs\u002Fauth\u002Forg-project-model","docs\u002F03.auth\u002F02.org-project-model",{"title":79,"path":80,"stem":81},"Issuing API keys","\u002Fdocs\u002Fauth\u002Fissuing-api-keys","docs\u002F03.auth\u002F03.issuing-api-keys",{"title":83,"path":84,"stem":85},"Multi-tenant RLS","\u002Fdocs\u002Fauth\u002Fmulti-tenant-rls","docs\u002F03.auth\u002F04.multi-tenant-rls",{"title":87,"path":88,"stem":89},"Operator sessions and step-up","\u002Fdocs\u002Fauth\u002Foperator-sessions","docs\u002F03.auth\u002F05.operator-sessions",{"title":91,"path":92,"stem":93,"children":94},"Proxy","\u002Fdocs\u002Fproxy","docs\u002F04.proxy\u002Findex",[95,96,99,103,107,111,115,119,123,127,131,135],{"title":91,"path":92,"stem":93},{"title":71,"path":97,"stem":98},"\u002Fdocs\u002Fproxy\u002Foverview","docs\u002F04.proxy\u002F01.overview",{"title":100,"path":101,"stem":102},"Authentication","\u002Fdocs\u002Fproxy\u002Fauthentication","docs\u002F04.proxy\u002F02.authentication",{"title":104,"path":105,"stem":106},"Request routing","\u002Fdocs\u002Fproxy\u002Frequest-routing","docs\u002F04.proxy\u002F03.request-routing",{"title":108,"path":109,"stem":110},"Sessions","\u002Fdocs\u002Fproxy\u002Fsessions","docs\u002F04.proxy\u002F04.sessions",{"title":112,"path":113,"stem":114},"Directives","\u002Fdocs\u002Fproxy\u002Fdirectives","docs\u002F04.proxy\u002F05.directives",{"title":116,"path":117,"stem":118},"Idempotency and budgets","\u002Fdocs\u002Fproxy\u002Fidempotency-and-budgets","docs\u002F04.proxy\u002F06.idempotency-and-budgets",{"title":120,"path":121,"stem":122},"Rate limiting","\u002Fdocs\u002Fproxy\u002Frate-limiting","docs\u002F04.proxy\u002F07.rate-limiting",{"title":124,"path":125,"stem":126},"Provider adapters","\u002Fdocs\u002Fproxy\u002Fprovider-adapters","docs\u002F04.proxy\u002F08.provider-adapters",{"title":128,"path":129,"stem":130},"Auth caching","\u002Fdocs\u002Fproxy\u002Fauth-caching","docs\u002F04.proxy\u002F09.auth-caching",{"title":132,"path":133,"stem":134},"Configuration","\u002Fdocs\u002Fproxy\u002Fconfiguration","docs\u002F04.proxy\u002F10.configuration",{"title":136,"path":137,"stem":138},"Provider routing and resilience","\u002Fdocs\u002Fproxy\u002Fprovider-routing-and-resilience","docs\u002F04.proxy\u002F11.provider-routing-and-resilience",{"title":140,"path":141,"stem":142,"children":143},"Memory","\u002Fdocs\u002Fmemory","docs\u002F05.memory\u002Findex",[144,145,149,153],{"title":140,"path":141,"stem":142},{"title":146,"path":147,"stem":148},"Memory overview","\u002Fdocs\u002Fmemory\u002Foverview","docs\u002F05.memory\u002F01.overview",{"title":150,"path":151,"stem":152},"Write path","\u002Fdocs\u002Fmemory\u002Fwrite-path","docs\u002F05.memory\u002F02.write-path",{"title":154,"path":155,"stem":156},"Search and lifecycle","\u002Fdocs\u002Fmemory\u002Fsearch-and-lifecycle","docs\u002F05.memory\u002F03.search-and-lifecycle",{"title":158,"path":159,"stem":160,"children":161},"Context","\u002Fdocs\u002Fcontext","docs\u002F06.context\u002Findex",[162,163,167],{"title":158,"path":159,"stem":160},{"title":164,"path":165,"stem":166},"Assembly pipeline","\u002Fdocs\u002Fcontext\u002Foverview","docs\u002F06.context\u002F01.overview",{"title":168,"path":169,"stem":170},"Ranking and packing","\u002Fdocs\u002Fcontext\u002Franking-and-packing","docs\u002F06.context\u002F02.ranking-and-packing",{"title":172,"path":173,"stem":174,"children":175},"Intelligence","\u002Fdocs\u002Fintelligence","docs\u002F07.intelligence\u002Findex",[176,177,181,185,189],{"title":172,"path":173,"stem":174},{"title":178,"path":179,"stem":180},"Workers","\u002Fdocs\u002Fintelligence\u002Fworkers","docs\u002F07.intelligence\u002F01.workers",{"title":182,"path":183,"stem":184},"Extraction","\u002Fdocs\u002Fintelligence\u002Fextraction","docs\u002F07.intelligence\u002F02.extraction",{"title":186,"path":187,"stem":188},"Embedder","\u002Fdocs\u002Fintelligence\u002Fembedder","docs\u002F07.intelligence\u002F03.embedder",{"title":190,"path":191,"stem":192},"Extraction evaluation","\u002Fdocs\u002Fintelligence\u002Fevaluation","docs\u002F07.intelligence\u002F04.evaluation",{"title":194,"path":195,"stem":196,"children":197},"API reference","\u002Fdocs\u002Fapi-reference","docs\u002F08.api-reference\u002Findex",[198,199,203,207,211,215,219,223],{"title":194,"path":195,"stem":196},{"title":200,"path":201,"stem":202},"Chat completions","\u002Fdocs\u002Fapi-reference\u002Fchat-completions","docs\u002F08.api-reference\u002F01.chat-completions",{"title":204,"path":205,"stem":206},"Responses","\u002Fdocs\u002Fapi-reference\u002Fresponses","docs\u002F08.api-reference\u002F02.responses",{"title":208,"path":209,"stem":210},"Errors","\u002Fdocs\u002Fapi-reference\u002Ferrors","docs\u002F08.api-reference\u002F03.errors",{"title":212,"path":213,"stem":214},"Health and metrics","\u002Fdocs\u002Fapi-reference\u002Fproxy-health","docs\u002F08.api-reference\u002F04.proxy-health",{"title":216,"path":217,"stem":218},"HTTP route inventory","\u002Fdocs\u002Fapi-reference\u002Fhttp-routes","docs\u002F08.api-reference\u002F05.http-routes",{"title":220,"path":221,"stem":222},"Management API","\u002Fdocs\u002Fapi-reference\u002Fmanagement-api","docs\u002F08.api-reference\u002F06.management-api",{"title":224,"path":225,"stem":226},"Auth gRPC (ValidateToken, ValidateAgent)","\u002Fdocs\u002Fapi-reference\u002Fauth-grpc","docs\u002F08.api-reference\u002F07.auth-grpc",{"title":228,"path":229,"stem":230,"children":231},"MCP","\u002Fdocs\u002Fmcp","docs\u002F09.mcp\u002Findex",[232,233,237],{"title":228,"path":229,"stem":230},{"title":234,"path":235,"stem":236},"Memory server","\u002Fdocs\u002Fmcp\u002Fmemory-server","docs\u002F09.mcp\u002F01.memory-server",{"title":238,"path":239,"stem":240},"Operator gateway","\u002Fdocs\u002Fmcp\u002Foperator-gateway","docs\u002F09.mcp\u002F02.operator-gateway",{"title":242,"path":243,"stem":244,"children":245},"Security","\u002Fdocs\u002Fsecurity","docs\u002F10.security\u002Findex",[246,247,251,254,258,262],{"title":242,"path":243,"stem":244},{"title":248,"path":249,"stem":250},"Security overview","\u002Fdocs\u002Fsecurity\u002Foverview","docs\u002F10.security\u002F01.overview",{"title":100,"path":252,"stem":253},"\u002Fdocs\u002Fsecurity\u002Fauthentication","docs\u002F10.security\u002F02.authentication",{"title":255,"path":256,"stem":257},"Tenant isolation","\u002Fdocs\u002Fsecurity\u002Ftenant-isolation","docs\u002F10.security\u002F03.tenant-isolation",{"title":259,"path":260,"stem":261},"Secrets and keys","\u002Fdocs\u002Fsecurity\u002Fsecrets-and-keys","docs\u002F10.security\u002F04.secrets-and-keys",{"title":263,"path":264,"stem":265},"Prompt injection","\u002Fdocs\u002Fsecurity\u002Fprompt-injection","docs\u002F10.security\u002F05.prompt-injection",{"title":267,"path":268,"stem":269,"children":270},"Operations","\u002Fdocs\u002Foperations","docs\u002F11.operations\u002Findex",[271,272,276,280,284,288,292,296,300,304,308],{"title":267,"path":268,"stem":269},{"title":273,"path":274,"stem":275},"Observability","\u002Fdocs\u002Foperations\u002Fobservability","docs\u002F11.operations\u002F01.observability",{"title":277,"path":278,"stem":279},"Traces and ClickHouse","\u002Fdocs\u002Foperations\u002Ftraces-and-clickhouse","docs\u002F11.operations\u002F02.traces-and-clickhouse",{"title":281,"path":282,"stem":283},"Health checks","\u002Fdocs\u002Foperations\u002Fhealth-checks","docs\u002F11.operations\u002F03.health-checks",{"title":285,"path":286,"stem":287},"Incident response","\u002Fdocs\u002Foperations\u002Fincident-response","docs\u002F11.operations\u002F04.incident-response",{"title":289,"path":290,"stem":291},"Troubleshooting","\u002Fdocs\u002Foperations\u002Ftroubleshooting","docs\u002F11.operations\u002F05.troubleshooting",{"title":293,"path":294,"stem":295},"Billing and budgets","\u002Fdocs\u002Foperations\u002Fbilling-and-budgets","docs\u002F11.operations\u002F06.billing-and-budgets",{"title":297,"path":298,"stem":299},"Evidence and relay","\u002Fdocs\u002Foperations\u002Fevidence-and-relay","docs\u002F11.operations\u002F07.evidence-and-relay",{"title":301,"path":302,"stem":303},"Console","\u002Fdocs\u002Foperations\u002Fconsole","docs\u002F11.operations\u002F08.console",{"title":305,"path":306,"stem":307},"Failure modes and recovery","\u002Fdocs\u002Foperations\u002Ffailure-and-recovery","docs\u002F11.operations\u002F09.failure-and-recovery",{"title":309,"path":310,"stem":311},"Data lifecycle and deletion","\u002Fdocs\u002Foperations\u002Fdata-lifecycle-and-deletion","docs\u002F11.operations\u002F10.data-lifecycle-and-deletion",{"title":313,"path":314,"stem":315,"children":316},"Deployment","\u002Fdocs\u002Fdeployment","docs\u002F12.deployment\u002Findex",[317,318,322,326,330],{"title":313,"path":314,"stem":315},{"title":319,"path":320,"stem":321},"Docker Compose (dev)","\u002Fdocs\u002Fdeployment\u002Fdocker-compose","docs\u002F12.deployment\u002F01.docker-compose",{"title":323,"path":324,"stem":325},"Environment variables","\u002Fdocs\u002Fdeployment\u002Fenvironment-variables","docs\u002F12.deployment\u002F02.environment-variables",{"title":327,"path":328,"stem":329},"Kubernetes","\u002Fdocs\u002Fdeployment\u002Fkubernetes","docs\u002F12.deployment\u002F03.kubernetes",{"title":331,"path":332,"stem":333},"Production readiness","\u002Fdocs\u002Fdeployment\u002Fproduction-readiness","docs\u002F12.deployment\u002F04.production-readiness",{"title":335,"path":336,"stem":337,"children":338},"Reference","\u002Fdocs\u002Freference","docs\u002F13.reference\u002Findex",[339,340,344,348,352],{"title":335,"path":336,"stem":337},{"title":341,"path":342,"stem":343},"Glossary","\u002Fdocs\u002Freference\u002Fglossary","docs\u002F13.reference\u002F01.glossary",{"title":345,"path":346,"stem":347},"Roadmap and gates","\u002Fdocs\u002Freference\u002Froadmap","docs\u002F13.reference\u002F02.roadmap",{"title":349,"path":350,"stem":351},"Architecture decisions","\u002Fdocs\u002Freference\u002Fadr","docs\u002F13.reference\u002F03.adr",{"title":353,"path":354,"stem":355},"Compatibility and versioning","\u002Fdocs\u002Freference\u002Fcompatibility","docs\u002F13.reference\u002F04.compatibility",{"id":357,"title":234,"audience":358,"author":359,"authorUrl":359,"body":360,"coverIndex":359,"coverLabel":359,"coverTone":359,"date":359,"decisionStatus":359,"description":1056,"excerpt":359,"extension":1057,"featured":1058,"historical":1058,"meta":1059,"navigation":1060,"path":235,"readingTime":359,"scope":1061,"seo":1062,"sourceOfTruth":1063,"status":375,"stem":236,"tags":359,"verifiedDate":376,"__hash__":1064},"docs\u002Fdocs\u002F09.mcp\u002F01.memory-server.md","integrator",null,{"type":361,"value":362,"toc":1046},"minimark",[363,371,377,382,444,447,451,575,586,591,601,604,613,616,630,677,681,715,718,722,814,817,820,929,932,936,1014,1018,1042],[364,365,366,370],"p",{},[367,368,369],"code",{},"services\u002Fmcp-memory"," exposes memory tools to MCP clients. It validates bearer credentials through auth, calls the memory service, enforces an org-wide Redis rate limit, and emits audit events.",[372,373],"page-status",{"note":374,"status":375,"verified":376},"Tools work locally; audit durability and governance remain open","PROVISIONAL","2026-10-21",[378,379,381],"h2",{"id":380},"transport-and-auth","Transport and auth",[383,384,385,397,407,424],"ul",{},[386,387,388,392,393,396],"li",{},[389,390,391],"strong",{},"Transport:"," Streamable HTTP at ",[367,394,395],{},"\u002Fmcp",".",[386,398,399,402,403,406],{},[389,400,401],{},"Auth:"," bearer token to ",[367,404,405],{},"AuthService.ValidateToken","; failures are rejected and audited.",[386,408,409,412,413,416,417,420,421,396],{},[389,410,411],{},"stdio:"," implemented for local clients, but requires ",[367,414,415],{},"IBEX_MCP_TRANSPORT=stdio"," and ",[367,418,419],{},"IBEX_MCP_ALLOW_STDIO=true","; it is forbidden when ",[367,422,423],{},"IBEX_ENV=production",[386,425,426,429,430,433,434,433,437,440,441,396],{},[389,427,428],{},"Probes:"," ",[367,431,432],{},"\u002Fhealth",", ",[367,435,436],{},"\u002Fready",[367,438,439],{},"\u002Fmetrics",", and ",[367,442,443],{},"\u002F.well-known\u002Foauth-protected-resource",[364,445,446],{},"The discovery document is not evidence that this service is an OAuth authorization server. It is not.",[378,448,450],{"id":449},"tools","Tools",[452,453,454,473],"table",{},[455,456,457],"thead",{},[458,459,460,464,467,470],"tr",{},[461,462,463],"th",{},"Tool",[461,465,466],{},"Arguments",[461,468,469],{},"Permission",[461,471,472],{},"Boundary",[474,475,476,505,539],"tbody",{},[458,477,478,484,497,502],{},[479,480,481],"td",{},[367,482,483],{},"search_memory",[479,485,486,489,490,493,494],{},[367,487,488],{},"query"," 1–2000 chars, ",[367,491,492],{},"limit"," 1–50 (default 5), optional ",[367,495,496],{},"agent_id",[479,498,499],{},[367,500,501],{},"MemoryRead",[479,503,504],{},"Org from the validated principal; agent verified active",[458,506,507,512,528,533],{},[479,508,509],{},[367,510,511],{},"write_memory",[479,513,514,517,518,521,522,525,526],{},[367,515,516],{},"content"," 1–8000 chars, ",[367,519,520],{},"category"," enum, ",[367,523,524],{},"confidence"," 0–1 (default 0.6), optional ",[367,527,496],{},[479,529,530],{},[367,531,532],{},"MemoryWrite",[479,534,535,536],{},"Sets ",[367,537,538],{},"metadata.mcp_source=mcp_explicit",[458,540,541,546,565,569],{},[479,542,543],{},[367,544,545],{},"record_feedback",[479,547,548,433,551,554,555,433,558,433,561,564],{},[367,549,550],{},"memory_id",[367,552,553],{},"feedback"," enum, optional ",[367,556,557],{},"session_id",[367,559,560],{},"trace_id",[367,562,563],{},"notes"," ≤2000",[479,566,567],{},[367,568,532],{},[479,570,571,572],{},"Agent-scoped principals must still pass ",[367,573,574],{},"ValidateAgent",[364,576,577,578,581,582,585],{},"The tools call the memory HTTP service through ",[367,579,580],{},"IBEX_MEMORY_HTTP_URL","; they do not open a direct database connection. Argument schemas are strict (",[367,583,584],{},"additionalProperties: false","), and unknown arguments are rejected rather than ignored.",[364,587,588,590],{},[367,589,511],{}," sends:",[592,593,599],"pre",{"className":594,"code":596,"language":597,"meta":598},[595],"language-text","X-Idempotency-Key = sha256(\"{org_id}:{agent_id}:{NFC(content).strip()}\")\n","text","",[367,600,596],{"__ignoreMap":598},[364,602,603],{},"The content is not lowercased. Repeating the same logical write therefore reaches the memory dedup\u002Fidempotency path instead of creating a second record. Search success with zero hits is a successful result, not an error.",[364,605,606,607,609,610,612],{},"The tools resolve ",[367,608,496],{}," in this order: principal agent (when bound), explicit ",[367,611,496],{}," argument, otherwise the call fails closed. The resolved agent must belong to the principal's organization and be active.",[378,614,120],{"id":615},"rate-limiting",[364,617,618,619,622,623,626,627,396],{},"The limit is an org-wide Redis calendar-minute budget, default ",[367,620,621],{},"120"," requests per minute, with optional per-organization overrides. There is no per-agent or per-tool tier. An unconfigured Redis in development uses the in-process no-op limiter; configured Redis failures are fail-open in development and fail-closed in ",[367,624,625],{},"staging","\u002F",[367,628,629],{},"production",[452,631,632,642],{},[455,633,634],{},[458,635,636,639],{},[461,637,638],{},"Failure",[461,640,641],{},"Behavior",[474,643,644,658,666],{},[458,645,646,649],{},[479,647,648],{},"Limit exceeded",[479,650,651,654,655],{},[367,652,653],{},"isError"," with ",[367,656,657],{},"rate_limited",[458,659,660,663],{},[479,661,662],{},"Redis unavailable in development",[479,664,665],{},"Explicit no-Redis exception is allowed only in development",[458,667,668,671],{},[479,669,670],{},"Redis unavailable in staging\u002Fproduction",[479,672,673,676],{},[367,674,675],{},"rate_limit_unavailable","; do not admit the call",[378,678,680],{"id":679},"audit-durability","Audit durability",[682,683,686,687,690,691,433,694,433,697,433,699,433,702,433,705,433,708,440,711,714],"callout",{"title":684,"type":685},"Logging is not durable audit","warning","With no ClickHouse URL, the default sink writes metadata to logs only. With a ClickHouse URL, the HTTP sink inserts into ",[367,688,689],{},"ibex.mcp_tool_calls"," via JSONEachRow, but a full queue drops events and sink failures are observable rather than transactionally guaranteed. The event contains ",[367,692,693],{},"request_id",[367,695,696],{},"org_id",[367,698,496],{},[367,700,701],{},"tool_name",[367,703,704],{},"latency_ms",[367,706,707],{},"success",[367,709,710],{},"error_code",[367,712,713],{},"requested_at"," — never arguments, content, or tokens.",[364,716,717],{},"Treat tool-call audit as incomplete until the sink, retention, restore path, and failure handling are verified for the target environment.",[378,719,721],{"id":720},"failure-codes","Failure codes",[452,723,724,734],{},[455,725,726],{},[458,727,728,731],{},[461,729,730],{},"Code",[461,732,733],{},"Meaning",[474,735,736,746,756,766,776,785,794,804],{},[458,737,738,743],{},[479,739,740],{},[367,741,742],{},"unauthorized",[479,744,745],{},"Missing\u002Finvalid bearer, or failed token validation",[458,747,748,753],{},[479,749,750],{},[367,751,752],{},"auth_unavailable",[479,754,755],{},"AuthService could not be reached",[458,757,758,763],{},[479,759,760],{},[367,761,762],{},"permission_denied",[479,764,765],{},"Token lacks the required permission or the agent is inactive\u002Fcross-org",[458,767,768,773],{},[479,769,770],{},[367,771,772],{},"invalid_params",[479,774,775],{},"Tool arguments failed schema validation",[458,777,778,782],{},[479,779,780],{},[367,781,657],{},[479,783,784],{},"Org MCP budget exhausted",[458,786,787,791],{},[479,788,789],{},[367,790,675],{},[479,792,793],{},"Protected-profile limiter unavailable",[458,795,796,801],{},[479,797,798],{},[367,799,800],{},"backend_unavailable",[479,802,803],{},"Memory HTTP timeout, transport error, or 5xx",[458,805,806,811],{},[479,807,808],{},[367,809,810],{},"backend_error",[479,812,813],{},"Memory returned a non-auth client\u002Fserver error",[364,815,816],{},"Cross-tenant agents are rejected at verification; memory responses with zero results remain successful.",[378,818,132],{"id":819},"configuration",[452,821,822,832],{},[455,823,824],{},[458,825,826,829],{},[461,827,828],{},"Variable",[461,830,831],{},"Purpose",[474,833,834,844,853,863,873,883,893,903,919],{},[458,835,836,841],{},[479,837,838],{},[367,839,840],{},"IBEX_AUTH_GRPC_ADDR",[479,842,843],{},"AuthService target",[458,845,846,850],{},[479,847,848],{},[367,849,580],{},[479,851,852],{},"Memory service origin; empty makes tools fail closed",[458,854,855,860],{},[479,856,857],{},[367,858,859],{},"IBEX_MCP_MEMORY_TIMEOUT_MS",[479,861,862],{},"Memory HTTP timeout; default 5000 ms",[458,864,865,870],{},[479,866,867],{},[367,868,869],{},"IBEX_MCP_REDIS_URL",[479,871,872],{},"Redis for rate limiting; required in protected profiles",[458,874,875,880],{},[479,876,877],{},[367,878,879],{},"IBEX_MCP_RATE_LIMIT_RPM",[479,881,882],{},"Org-wide requests per minute; default 120",[458,884,885,890],{},[479,886,887],{},[367,888,889],{},"IBEX_MCP_RATE_LIMIT_ORG_OVERRIDES",[479,891,892],{},"Per-org RPM overrides",[458,894,895,900],{},[479,896,897],{},[367,898,899],{},"IBEX_MCP_CLICKHOUSE_URL",[479,901,902],{},"Optional audit sink; unset means logs only",[458,904,905,910],{},[479,906,907],{},[367,908,909],{},"IBEX_MCP_TRANSPORT",[479,911,912,915,916],{},[367,913,914],{},"streamable_http"," or ",[367,917,918],{},"stdio",[458,920,921,926],{},[479,922,923],{},[367,924,925],{},"IBEX_MCP_ALLOW_STDIO",[479,927,928],{},"Required for stdio; never enable in production",[364,930,931],{},"Production discovery and resource URLs must be public HTTPS, non-loopback, and bound to an approved origin.",[378,933,935],{"id":934},"run-locally","Run locally",[592,937,941],{"className":938,"code":939,"language":940,"meta":598,"style":598},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","cd services\u002Fmcp-memory\nuv sync --frozen --extra dev\nIBEX_AUTH_GRPC_ADDR=127.0.0.1:9091 \\\n  .venv\u002Fbin\u002Fuvicorn app.main:app --host 127.0.0.1 --port 8090\n","bash",[367,942,943,956,976,992],{"__ignoreMap":598},[944,945,948,952],"span",{"class":946,"line":947},"line",1,[944,949,951],{"class":950},"sJdAF","cd",[944,953,955],{"class":954},"sTbE_"," services\u002Fmcp-memory\n",[944,957,959,963,966,970,973],{"class":946,"line":958},2,[944,960,962],{"class":961},"sYn-s","uv",[944,964,965],{"class":954}," sync",[944,967,969],{"class":968},"sz9Cv"," --frozen",[944,971,972],{"class":968}," --extra",[944,974,975],{"class":954}," dev\n",[944,977,979,982,986,989],{"class":946,"line":978},3,[944,980,840],{"class":981},"sSC40",[944,983,985],{"class":984},"soVBu","=",[944,987,988],{"class":954},"127.0.0.1:9091",[944,990,991],{"class":961}," \\\n",[944,993,995,998,1001,1004,1008,1011],{"class":946,"line":994},4,[944,996,997],{"class":954},"  .venv\u002Fbin\u002Fuvicorn",[944,999,1000],{"class":954}," app.main:app",[944,1002,1003],{"class":968}," --host",[944,1005,1007],{"class":1006},"s7CZa"," 127.0.0.1",[944,1009,1010],{"class":968}," --port",[944,1012,1013],{"class":1006}," 8090\n",[378,1015,1017],{"id":1016},"limits","Limits",[383,1019,1020,1023,1026,1029,1032,1039],{},[386,1021,1022],{},"No per-agent or per-tool rate limit; the budget is org-wide.",[386,1024,1025],{},"No OAuth authorization-server implementation; the discovery document advertises a resource, not an issuer.",[386,1027,1028],{},"Audit is logging-first and not evidence-grade by default.",[386,1030,1031],{},"Tool results are data, not instructions; do not feed them back as system prompts.",[386,1033,1034,1035,1038],{},"The MCP memory server does not use the shared ",[367,1036,1037],{},"mcp_gateway"," enforcement core yet.",[386,1040,1041],{},"Hosted capacity, multi-replica behavior, and durable audit retention are unproven.",[1043,1044,1045],"style",{},"html pre.shiki code .sJdAF, html code.shiki .sJdAF{--shiki-light:#6182B8;--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":598,"searchDepth":958,"depth":958,"links":1047},[1048,1049,1050,1051,1052,1053,1054,1055],{"id":380,"depth":958,"text":381},{"id":449,"depth":958,"text":450},{"id":615,"depth":958,"text":120},{"id":679,"depth":958,"text":680},{"id":720,"depth":958,"text":721},{"id":819,"depth":958,"text":132},{"id":934,"depth":958,"text":935},{"id":1016,"depth":958,"text":1017},"Streamable HTTP MCP server for tenant-scoped memory search, write, and feedback.","md",false,{},true,"provisional",{"title":234,"description":1056},"services\u002Fmcp-memory\u002FREADME.md; packages\u002Fmcp_gateway","Eqo_EsZV6jRzgbiV4Zf7vqaPODYh5omfvgvcID4PTaM",[1066,1068],{"title":228,"path":229,"stem":230,"description":1067,"children":-1},"Tenant-scoped memory tools and the default-off read-only operator gateway.",{"title":238,"path":239,"stem":240,"description":1069,"children":-1},"Default-off, read-only MCP metadata tools with fail-closed authorization.",1792875077694]