{
  "data": {
    "tool": {
      "category": "agent-memory",
      "endpoint": "https://synap-mcp.maximem.ai/mcp",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/maximem-synap.json",
      "kind": "mcp",
      "listed": "indexed",
      "liveUrl": "https://www.anchorterminal.com/api/v1/live/maximem-synap.json",
      "markdownUrl": "https://www.anchorterminal.com/tools/maximem-synap.md",
      "mcpTools": {
        "check": {
          "checker": "anchor-check/1.0",
          "totalTokens": 1748,
          "counts": {
            "error": 0,
            "note": 1,
            "warn": 8
          },
          "findings": [
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "check_memory_status",
              "message": "its one parameter, ingestion_id, has no description",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "list_recent_memories",
              "message": "1 parameter without a description: max_results",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "log_exchange",
              "message": "4 parameters without a description: assistant_message, conversation_id, user_message, wait_for_processing",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC11",
              "severity": "warn",
              "tool": "recall_context",
              "message": "2 parameters without a description: max_results, query",
              "fix": "Describe each one: format, units, an example, and what happens when it's left out."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "check_memory_status",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"check\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "list_recent_memories",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Its name starts with \"list\"; if it only reads, set readOnlyHint: true so harnesses can run it without asking."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "log_exchange",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC16",
              "severity": "warn",
              "tool": "recall_context",
              "message": "no readOnlyHint or destructiveHint",
              "fix": "Set readOnlyHint: true if it only reads; otherwise set destructiveHint and idempotentHint."
            },
            {
              "rule": "TC29",
              "severity": "note",
              "message": "about 171 tokens (9% of the definitions) are titles that repeat property or function names",
              "fix": "Strip \"title\" keys that only restate a name before listing tools."
            }
          ]
        },
        "checkedAt": "2026-10-04T22:20:22Z",
        "count": 4,
        "schemaTokens": 1748,
        "status": "ok",
        "tools": [
          {
            "name": "log_exchange",
            "description": "After each user message, send the exchange here so it can be remembered. You do not need to decide what is important, just forward the user message (and your reply, if you have one) and Synap will keep what matters. If your app serves more than one end-user, pass that person's stable id as user_id so each person's memory stays separate; if every conversation is the same single user, omit it. SCOPING: customer_id is B2B ONLY. On a B2B instance (user_context_isolation=strict) it is REQUIRED and a user_id on its own is an error. On a B2C instance (user_context_isolation=equals_customer) it is NOT accepted: the API rejects it with HTTP 400, customer-scoped retrieval does not exist there, and user_id is the whole identity. If you do not know which mode this instance is in, send user_id only and no customer_id; GET /api/v1/auth/whoami reports the mode as user_context_isolation. Logging is fire-and-forget by default; set wait_for_processing=true only when you need to confirm the memory finished extracting before continuing.",
            "inputSchema": {
              "properties": {
                "assistant_message": {
                  "default": "",
                  "title": "Assistant Message",
                  "type": "string"
                },
                "conversation_id": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "default": null,
                  "title": "Conversation Id"
                },
                "customer_id": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "default": null,
                  "description": "B2B ONLY. Required on a B2B instance (user_context_isolation=strict), where a user_id on its own is an error. NOT accepted on a B2C instance (user_context_isolation=equals_customer): the API rejects it with HTTP 400 and there is no customer scope to read from. When in doubt leave this out and send user_id alone. GET /api/v1/auth/whoami reports the mode.",
                  "title": "Customer Id"
                },
                "user_id": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "default": null,
                  "description": "Stable id of the end-user this call belongs to. On a B2C instance this is the ONLY identifier you send and it is the whole identity. On a B2B instance send it together with customer_id. Omit both if every conversation is the same single user.",
                  "title": "User Id"
                },
                "user_message": {
                  "title": "User Message",
                  "type": "string"
                },
                "wait_for_processing": {
                  "default": false,
                  "title": "Wait For Processing",
                  "type": "boolean"
                }
              },
              "required": [
                "user_message"
              ],
              "title": "log_exchangeArguments",
              "type": "object"
            },
            "outputSchema": {
              "properties": {
                "result": {
                  "title": "Result",
                  "type": "string"
                }
              },
              "required": [
                "result"
              ],
              "title": "log_exchangeOutput",
              "type": "object"
            }
          },
          {
            "name": "check_memory_status",
            "description": "Check whether a logged exchange has finished processing. Pass the ingestion_id returned by log_exchange. Returns the processing status and how many memories were extracted. Useful to confirm a save completed (extraction is asynchronous). Takes no user_id or customer_id: an ingestion_id already identifies the write, so the identifier contract does not apply here.",
            "inputSchema": {
              "properties": {
                "ingestion_id": {
                  "title": "Ingestion Id",
                  "type": "string"
                }
              },
              "required": [
                "ingestion_id"
              ],
              "title": "check_memory_statusArguments",
              "type": "object"
            },
            "outputSchema": {
              "properties": {
                "result": {
                  "title": "Result",
                  "type": "string"
                }
              },
              "required": [
                "result"
              ],
              "title": "check_memory_statusOutput",
              "type": "object"
            }
          },
          {
            "name": "recall_context",
            "description": "Before replying, call this to recall anything already known about this user from past conversations. Use the user's latest message as the query. If you serve multiple end-users, pass the same user_id you log with so you recall the right person's memory. SCOPING: customer_id is B2B ONLY. On a B2B instance (user_context_isolation=strict) it is REQUIRED and a user_id on its own is an error. On a B2C instance (user_context_isolation=equals_customer) it is NOT accepted: the API rejects it with HTTP 400, customer-scoped retrieval does not exist there, and user_id is the whole identity. If you do not know which mode this instance is in, send user_id only and no customer_id; GET /api/v1/auth/whoami reports the mode as user_context_isolation.",
            "inputSchema": {
              "properties": {
                "customer_id": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "default": null,
                  "description": "B2B ONLY. Required on a B2B instance (user_context_isolation=strict), where a user_id on its own is an error. NOT accepted on a B2C instance (user_context_isolation=equals_customer): the API rejects it with HTTP 400 and there is no customer scope to read from. When in doubt leave this out and send user_id alone. GET /api/v1/auth/whoami reports the mode.",
                  "title": "Customer Id"
                },
                "max_results": {
                  "anyOf": [
                    {
                      "type": "integer"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "default": null,
                  "title": "Max Results"
                },
                "query": {
                  "title": "Query",
                  "type": "string"
                },
                "user_id": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "default": null,
                  "description": "Stable id of the end-user this call belongs to. On a B2C instance this is the ONLY identifier you send and it is the whole identity. On a B2B instance send it together with customer_id. Omit both if every conversation is the same single user.",
                  "title": "User Id"
                }
              },
              "required": [
                "query"
              ],
              "title": "recall_contextArguments",
              "type": "object"
            },
            "outputSchema": {
              "properties": {
                "result": {
                  "title": "Result",
                  "type": "string"
                }
              },
              "required": [
                "result"
              ],
              "title": "recall_contextOutput",
              "type": "object"
            }
          },
          {
            "name": "list_recent_memories",
            "description": "List recent things remembered about this user. Useful for debugging or to confirm that memory is working. Pass user_id to scope to one person. SCOPING: customer_id is B2B ONLY. On a B2B instance (user_context_isolation=strict) it is REQUIRED and a user_id on its own is an error. On a B2C instance (user_context_isolation=equals_customer) it is NOT accepted: the API rejects it with HTTP 400, customer-scoped retrieval does not exist there, and user_id is the whole identity. If you do not know which mode this instance is in, send user_id only and no customer_id; GET /api/v1/auth/whoami reports the mode as user_context_isolation.",
            "inputSchema": {
              "properties": {
                "customer_id": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "default": null,
                  "description": "B2B ONLY. Required on a B2B instance (user_context_isolation=strict), where a user_id on its own is an error. NOT accepted on a B2C instance (user_context_isolation=equals_customer): the API rejects it with HTTP 400 and there is no customer scope to read from. When in doubt leave this out and send user_id alone. GET /api/v1/auth/whoami reports the mode.",
                  "title": "Customer Id"
                },
                "max_results": {
                  "default": 10,
                  "title": "Max Results",
                  "type": "integer"
                },
                "user_id": {
                  "anyOf": [
                    {
                      "type": "string"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "default": null,
                  "description": "Stable id of the end-user this call belongs to. On a B2C instance this is the ONLY identifier you send and it is the whole identity. On a B2B instance send it together with customer_id. Omit both if every conversation is the same single user.",
                  "title": "User Id"
                }
              },
              "title": "list_recent_memoriesArguments",
              "type": "object"
            },
            "outputSchema": {
              "properties": {
                "result": {
                  "title": "Result",
                  "type": "string"
                }
              },
              "required": [
                "result"
              ],
              "title": "list_recent_memoriesOutput",
              "type": "object"
            }
          }
        ]
      },
      "name": "Synap Memory",
      "note": "Indexed from the official MCP registry: facts and our own checks, not reviewed, so no score, grade or rank.",
      "packages": null,
      "pageJsonUrl": "https://www.anchorterminal.com/tools/maximem-synap.json",
      "popularity": {
        "githubStars": 76
      },
      "registryName": "ai.maximem/synap",
      "remotes": [
        {
          "type": "streamable-http",
          "url": "https://synap-mcp.maximem.ai/mcp"
        }
      ],
      "repository": "https://github.com/maximem-ai/maximem_synap_sdk",
      "reviewed": false,
      "slug": "maximem-synap",
      "source": "the official MCP registry",
      "sourceUrl": "https://registry.modelcontextprotocol.io/v0.1/servers?search=ai.maximem/synap",
      "summary": "Persistent memory for AI agents — log and recall conversation context over MCP.",
      "updatedAt": "2026-07-22T06:30:15Z",
      "url": "https://www.anchorterminal.com/tools/maximem-synap",
      "vendor": "maximem.ai",
      "vendorUrl": "https://www.maximem.ai/docs",
      "version": "0.1.0",
      "websiteUrl": "https://www.maximem.ai/docs",
      "where": "hosted",
      "why": [
        "vendor"
      ]
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/tools/maximem-synap",
    "json": "https://www.anchorterminal.com/tools/maximem-synap.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/tools/maximem-synap.md",
    "slim": "https://www.anchorterminal.com/tools/maximem-synap.min.md"
  },
  "markdown": "# Synap Memory\n\n\u003e Indexed, not reviewed: facts from the official MCP registry and our own checks. No score, grade or rank, and not in the rankings until the panel reviews it. How the index works: https://www.anchorterminal.com/indexed/\n\n- Kind: MCP server, by maximem.ai (https://www.maximem.ai/docs)\n- Category: Agent memory (https://www.anchorterminal.com/categories/agent-memory.md)\n- Listed because: It's published in the registry under maximem.ai, a namespace the registry only gives to whoever proves they control that domain.\n- What the official MCP registry says: Persistent memory for AI agents — log and recall conversation context over MCP.\n\n## Facts\n\n- MCP registry: `ai.maximem/synap` 0.1.0\n- Endpoint: https://synap-mcp.maximem.ai/mcp (streamable HTTP)\n- Source: https://github.com/maximem-ai/maximem_synap_sdk\n- Website: https://www.maximem.ai/docs\n- GitHub stars: 76\n- Registry entry updated: 2026-07-22\n\n## Tools\n\n- Tools it lists (4, about 1,748 tokens of context, `tools/list` without credentials over MCP 2025-11-25, checked 2026-10-04 22:20 UTC):\n  - `log_exchange`: After each user message, send the exchange here so it can be remembered. You do not need to decide what is important, just forward the user message (and your…\n  - `check_memory_status`: Check whether a logged exchange has finished processing. Pass the ingestion_id returned by log_exchange. Returns the processing status and how many memories…\n  - `recall_context`: Before replying, call this to recall anything already known about this user from past conversations. Use the user's latest message as the query. If you serve…\n  - `list_recent_memories`: List recent things remembered about this user. Useful for debugging or to confirm that memory is working. Pass user_id to scope to one person. SCOPING:…\n- How its tools read to an agent (0 errors, 8 warnings, 1 note, about 1,748 tokens; rules at https://www.anchorterminal.com/check.md; not part of the score):\n  - warn TC11 check_memory_status: its one parameter, ingestion_id, has no description\n  - warn TC11 list_recent_memories: 1 parameter without a description: max_results\n  - warn TC11 log_exchange: 4 parameters without a description: assistant_message, conversation_id, user_message, wait_for_processing\n  - warn TC11 recall_context: 2 parameters without a description: max_results, query\n  - warn TC16 check_memory_status: no readOnlyHint or destructiveHint\n  - warn TC16 list_recent_memories: no readOnlyHint or destructiveHint\n  - warn TC16 log_exchange: no readOnlyHint or destructiveHint\n  - warn TC16 recall_context: no readOnlyHint or destructiveHint\n  - note TC29 server: about 171 tokens (9% of the definitions) are titles that repeat property or function names\n\n- JSON: https://www.anchorterminal.com/api/v1/tools/maximem-synap.json\n- Being indexed says nothing about quality, and nobody can pay for it. Ask for a review: https://www.anchorterminal.com/builders/#claiming\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Terminal",
        "url": "https://www.anchorterminal.com/tools/"
      },
      {
        "name": "Indexed",
        "url": "https://www.anchorterminal.com/indexed/"
      },
      {
        "name": "Synap Memory",
        "url": ""
      }
    ],
    "description": "Synap Memory, an MCP server by maximem.ai, listed from the official MCP registry. Indexed, not reviewed: facts and our own checks, no score or ranking. Persistent memory for AI agents — log and recall conversation context over MCP.",
    "facts": [
      "not reviewed",
      "not ranked",
      "facts only"
    ],
    "h1": "Synap Memory",
    "image": "https://www.anchorterminal.com/assets/og/indexed.png",
    "path": "/tools/maximem-synap",
    "published": "",
    "section": "indexed",
    "title": "Synap Memory: MCP server, indexed from the official MCP registry",
    "toc": null,
    "updated": "2026-10-05",
    "url": "https://www.anchorterminal.com/tools/maximem-synap"
  },
  "tokens": {
    "markdown": 900,
    "slim": 830
  },
  "version": 1
}
