Skip to main content
Glama

🧠 LogicMem — AI Agent Memory Infrastructure

Persistent memory, A2A sharing, reasoning engine, and immutable audit trail for AI agents via the Model Context Protocol.

Python 3.11+ License: MIT MCP Compatible


The Problem

AI agents are stateless by design. Every session starts from scratch:

Session 1                              Session 2
──────────                             ──────────
User: "I'm building a SaaS"     →     User: "How's my SaaS coming?"
Agent: "Tell me more..."              Agent: "I don't know anything
...                                   about your SaaS"
[Session ends]                        
                                      Agent forgot EVERYTHING.

This is fine for demos. It's catastrophic for production AI workflows.

Related MCP server: LogicMem MCP Server

The Solution

LogicMem gives your AI agent persistent memory — connect any MCP client and get:

  • šŸ” Persistent Memory — Store and search memories across sessions

  • 🧠 Reasoning Engine — Multi-step reasoning that consults memory

  • šŸ”— A2A Memory Sharing — Agents share context in real-time

  • šŸ“‹ Immutable Audit Trail — Cryptographically verifiable history

  • šŸŽ™ļø Voice Memory — Caller history for VAPI, Retell AI, Bland AI


Open Core Model

This repo is the LogicMem SDK — the open-source client for connecting AI agents to the LogicMem memory fabric. The SDK is fully open (MIT licensed). The reasoning engine and audit chain run on LogicMem's private server.

Open Source (This Repo)

LogicMem Pro / Enterprise

SDK / Client

āœ… Fully open (MIT)

āœ… Included

Persistent Memory

āœ… Up to 1,000 ops/mo (free tier)

āœ… Unlimited

A2A Memory Sharing

āœ… Basic

āœ… Advanced governance + cross-org

Reasoning Engine

āœ… API call (server-powered)

āœ… Deep / Exhaustive modes

Audit Trail

āœ… API call (server-verified)

āœ… Tamper-evident ledger + CNSA 2.0

Voice Agent Memory

āœ…

āœ…

Deployment

Cloud (logicmem.io)

Cloud, on-prem, or air-gap

Support

Community

Dedicated + SLA

Why this model? The SDK gives developers the steering wheel. The LogicMem server is the engine. You get a great developer experience — and your AI gets production-grade memory infrastructure without building it yourself.


Install

# Install the Python SDK (library only)
pip install --break-system-packages git+https://github.com/LogicMem/LogicMem-mcp-.git

# Install with CLI tools (includes logicmem-server for OpenClaw MCP):
pip install --break-system-packages "logicmem[cli] @ git+https://github.com/LogicMem/LogicMem-mcp-.git"

# Linux/Ubuntu (no flag needed):
pip install "logicmem[cli] @ git+https://github.com/LogicMem/LogicMem-mcp-.git"

Quick Start (< 5 minutes)

1. Get an API Key

Sign up at logicmem.io → Settings → API Keys → Create Key.

Free tier: 1,000 memory operations/month.

āš ļø macOS users: If you see a PEP 668 error during install, rerun with --break-system-packages flag (see Install section above).

2. Use the Python SDK

from logicmem import LogicMem

# Initialize the client
memory = LogicMem(api_key="lm_your_api_key")

# Store a memory
memory.log(
    text="User prefers urgent messages via Telegram, not email.",
    category="preference",
    importance=8,
)

# Search memories
results = memory.recall(query="user communication preferences")
print(results[0]["text"])
# → "User prefers urgent messages via Telegram, not email."

# Store a task with context
memory.log(
    text="Review Q3 proposal by Friday. Priority: cost breakdown first, then timeline.",
    category="task",
    importance=9,
)

# Session briefing — full context at start of session
brief = memory.session(client_id="ed_creed")
print(brief["confidence"])   # How confident is the agent about this user?
print(brief["relationship_trend"])  # improving / declining / stable

3. Reasoning Engine

# Multi-step reasoning with memory at each step
answer = memory.reason(
    question="Should we prioritize the mobile app or web dashboard first?",
    context="User is a solo founder with limited engineering bandwidth.",
    mode="deep",  # fast / deep / exhaustive
)
print(answer["answer"])
print(answer["confidence"])

# Verify a claim against stored facts
verdict = memory.verify("User has a budget of $50k for this project")
print(verdict["verdict"])   # supported / contradicted / inconclusive
print(verdict["evidence"])  # supporting entries

# Self-critique before committing to an answer
review = memory.reflect(
    draft_answer="You should build the web dashboard first.",
    question="What should we prioritize first?",
    memory_query="user preferences priorities",
)
print(review["score"])      # 0-100
print(review["gaps"])       # weaknesses in the answer

4. Agent-to-Agent (A2A) Memory Sharing

from logicmem.a2a import A2AClient

# Agent A: Share a memory with Agent B
a2a = A2AClient(api_key="lm_agent_a_key", agent_id="agent-researcher")

# Register this agent
a2a.register(name="Researcher Agent", agent_type="agent", client_id="team-alpha")

# Share context with another agent
a2a.share_memory(
    target_agent_id="agent-executor",
    memory={"text": "User needs Q3 report by Friday. High priority."},
    category="task",
    importance=9,
)

# Check for new shared memories from other agents
shared = a2a.sync()
for entry in shared:
    print(f"From {entry['from_agent_id']}: {entry['text']}")

5. Verify Audit Chain

from logicmem.audit import AuditChain

audit = AuditChain(memory)  # pass LogicMem client

# Verify the audit chain has not been tampered with
result = audit.verify()
print(result["valid"])  # True if chain integrity is intact

# Log a correction (improves the model)
audit.log_correction(
    original="The user prefers email for urgent messages.",
    corrected="The user prefers Telegram for urgent messages, not email.",
    reason="User explicitly stated Telegram in call on 2026-06-10.",
)

# Check DPO training pipeline stats
stats = audit.dpo_stats()
print(f"Correction pairs ready: {stats['ready_count']}")

Architecture

ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│                      Your AI Agent                           │
│              (Claude, GPT, Any MCP Client)                    │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                             │ MCP
                             ā–¼
ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
│                   LogicMem MCP Server                        │
│               mcp.logicmem.io                              │
│  ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā” │
│  │   Memory    │ │  Reasoning │ │    A2A     │ │ Audit  │ │
│  │   Tools     │ │   Engine   │ │   Relay    │ │ Chain  │ │
│  ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜ │
ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜
                             │
           ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”¼ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
           ā–¼                 ā–¼                 ā–¼
    ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”   ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”   ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”
    │  Memory    │   │   Memory   │   │   Audit   │
    │  Storage   │   │   Index    │   │   Ledger  │
    │(Supabase)  │   │ (Qdrant)   │   │(Hash Chain)│
    ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜   ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜   ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜

OpenClaw Integration

OpenClaw is the fastest-growing open-source AI agent framework (300K+ GitHub stars). LogicMem is fully compatible with OpenClaw.

Option A — Direct MCP Server URL (Simplest, 1 line of config)

Add LogicMem as a streamable-http MCP server in your OpenClaw config (~/.openclaw/openclaw.json):

{
  "mcp": {
    "servers": {
      "logicmem": {
        "transport": "streamable-http",
        "url": "https://mcp.logicmem.io/mcp",
        "headers": {
          "Authorization": "Bearer lm_YOUR_API_KEY"
        }
      }
    }
  }
}

Note: The streamable-http transport is the modern MCP standard (2024-11-05). The server at mcp.logicmem.io supports both streamable-http and legacy sse.

Option B — Local stdio Server (For power users with multiple MCP servers)

Some OpenClaw users have multiple MCP servers configured — a mix of stdio (local programs) and HTTP/SSE (remote servers). OpenClaw has a known limitation where it can't freely mix stdio and SSE servers in the same config.

The fix: Use our local stdio server as a bridge. Install it via pip:

pip install --break-system-packages \
  "logicmem[cli] @ git+https://github.com/LogicMem/LogicMem-mcp-.git"

Then configure OpenClaw to use the local stdio command:

{
  "mcp": {
    "servers": {
      "logicmem": {
        "command": "logicmem-server",
        "env": {
          "LOGICMEM_API_KEY": "lm_YOUR_API_KEY",
          "LOGICMEM_CLIENT_ID": "your-client-id"
        }
      }
    }
  }
}

This approach:

  • Works alongside any other MCP server (stdio or HTTP)

  • No SSE/stdio mixing conflict

  • Installs in seconds via pip

Quick Test — Verify Your Setup

After configuring, test that LogicMem is connected:

# Check if the MCP server is recognized
openclaw mcp list

# Or test directly in a conversation with your agent:
# "What is my name?" (should recall from memory if previously stored)

For Specific OpenClaw Agents

Agent

Recommended Setup

Config Type

Themis (any OpenClaw agent)

Direct URL

streamable-http config

Hermes

Direct URL or stdio pip

Same as above

Claude Code

Direct URL

streamable-http in Claude Code config

Custom OpenClaw agents

Direct URL

Same as above

Environment Variables

Variable

Default

Description

LOGICMEM_API_KEY

—

Your API key (lm_xxx) from logicmem.io/settings

LOGICMEM_SERVER_URL

https://api.logicmem.io

Point to self-hosted server if using logicmem-open

LOGICMEM_CLIENT_ID

default

Default client_id for memory operations

LOGICMEM_TIMEOUT

30

HTTP request timeout in seconds


MCP Protocol Reference

The server accepts JSON-RPC 2.0 requests over HTTPS.

MCP Endpoint: https://mcp.logicmem.io/mcp REST API Base URL: https://api.logicmem.io

Authentication: Authorization: Bearer <api_key> header required for write operations.

āš ļø Tool name prefix: The MCP server at mcp.logicmem.io serves logicframe_* tool names (e.g. logicframe_memory_log, logicframe_memory_recall). The local pip package (logicmem[cli]) serves logicmem_* tool names. Both connect to the same backend.

Core Tools (via MCP server at mcp.logicmem.io)

Tool

Description

logicframe_memory_log

Store a new memory with category, importance, tags

logicframe_memory_recall

Search memories with natural language

logicframe_memory_context

Get full context about a client, project, or situation

logicframe_reason

Multi-step reasoning with memory consultation

logicframe_verify

Verify a claim against stored facts

logicframe_reflect

Self-critique — evaluate draft against memory

logicframe_audit_verify

Verify integrity of the audit chain

logicframe_intelligence

Proactive intelligence — detect patterns and overdue items

logicframe_correction_log

Log corrections — feeds DPO training pipeline

logicframe_conversations_store

Store conversation state for auto-resume

logicframe_conversations_resume

Retrieve stored conversation for continuity

See MCP-PROTOCOL.md for the full protocol reference.


Comparison

Feature

LogicMem

Mem0

Letta

Zep

MCP-native

āœ… Full

āš ļø

āœ…

āš ļø

Reasoning engine

āœ…

āŒ

āš ļø

āŒ

A2A memory sharing

āœ…

āŒ

āš ļø

āŒ

Immutable audit trail

āœ…

āŒ

āŒ

āš ļø

DPO training pipeline

āœ…

āŒ

āŒ

āŒ

Voice agent memory

āœ…

āŒ

āš ļø

āŒ

Federated memory

āœ…

āŒ

āŒ

āŒ


Security

  • Encryption: AES-256-GCM at rest, TLS 1.3 in transit

  • Compliance: CNSA 2.0 cryptography for defense/government workloads

  • Audit: Every operation logged to immutable hash-linked chain

  • API Keys: Per-agent keys with fine-grained permissions

See SECURITY.md for the full security model.


Documentation

All documentation lives in the docs/ folder right here in this repo:

Doc

What You Need

šŸ“– Start Here

Install + first 10 lines of code

šŸ”Œ MCP Protocol

Full protocol reference

šŸ”— A2A Sharing

Agent-to-agent memory

šŸ”’ Security

Encryption, CNSA 2.0, audit

šŸ’» Code Examples

All examples in one place


Contributing

Contributions welcome. Please see CONTRIBUTING.md.

We especially welcome:

  • MCP client examples (more clients → more adoption)

  • Framework integrations (LangChain, AutoGPT, CrewAI, etc.)

  • A2A protocol extensions

  • SDK implementations in other languages


License

MIT License. See LICENSE.

Available Tools

12 tools
logicmem_a2a_heartbeatD

Send a heartbeat to the A2A registry.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo
agent_idYes
client_idYes

TDQS

D1.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses no behavioral traits. It does not explain side effects, idempotency, error conditions, or whether it is a read or write operation. With no annotations, this leaves agents completely in the dark.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is succinct but under-specified. It lacks necessary details and structure, making it more representative of under-specification than effective conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, no annotations, and a one-line description, the tool provides almost no contextual information. Agents cannot understand return values, failure modes, or how this tool fits into the A2A workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, and the description adds no meaning to 'agent_id', 'client_id', or 'status'. The tool description fails to compensate for the undocumented parameters, leaving their semantics unclear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('Send') and resource ('A2A registry'), making the basic action understandable. However, it does not explicitly differentiate this from sibling tools like 'a2a_register' or 'a2a_sync', so it lacks sibling distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No usage guidance is provided. There is no mention of when to use a heartbeat versus other A2A operations, nor any prerequisites or alternatives. Agents receive no context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_a2a_list_agentsA

List all registered agents for a client_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It states the basic listing action and 'all' scope, but does not disclose behaviors such as read-only nature, error handling for invalid client_id, or whether results are paginated. This is a significant gap for a tool with no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no redundant words. It immediately conveys the core function without unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with one parameter and no output schema, the description is largely sufficient. It clearly states the input and expected action. Minor gaps exist around return format and error cases, but given the simplicity, it is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description adds meaning by indicating the client_id identifies whose agents to list. However, it does not explain the format, constraints, or expected values for client_id, leaving some ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' with a clear resource ('all registered agents') and scope ('for a client_id'). This clearly differentiates it from sibling tools like register, heartbeat, or sync, which perform different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving agents associated with a client, but does not explicitly state when to choose this over alternatives like register or sync. No exclusions or context are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_a2a_registerC

Register this agent in the A2A registry.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
agent_idYes
client_idYes
agent_typeNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the burden of disclosing side effects and behavioral traits. It merely says 'Register', but does not mention whether registration is idempotent, requires authentication, overwrites existing entries, or what occurs upon successful registration.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no wasted words, which is structurally good. However, it is so brief that it under-specifies the tool, making it minimally viable rather than truly helpful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a registration tool with no annotations, no output schema, and four parameters, the description is incomplete. It fails to explain the registration workflow, valid values, or what actions are expected, leaving significant gaps for an agent trying to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no explanation of the parameters (name, agent_id, client_id, agent_type). The description does not compensate for the low coverage, leaving parameter semantics entirely to the schema's property names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Register') and the target ('this agent in the A2A registry'), making the tool's purpose immediately understandable. It distinguishes from siblings like heartbeat, list_agents, and sync, though it does not explicitly differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not specify prerequisites, context, or when registration is needed, leaving the agent to infer usage from the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_a2a_syncB

Check for new shared memories from other agents since last sync.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
agent_idYes
client_idYes
since_timestampNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral transparency. It describes a 'check' operation, implying a read, but does not disclose whether the tool updates a sync state/cursor, requires specific permissions, or has any side effects. The behavior around 'last sync' tracking is unaddressed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that is front-loaded with the core purpose. Every word contributes, and there is no redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has four parameters, no output schema, and no annotations; the description fails to explain parameters, return values, or the 'last sync' mechanism. For a tool that likely updates sync state and returns results, the description is incomplete for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain any parameters. The phrase 'since last sync' hints at since_timestamp, but agent_id and client_id are not explained. The description adds minimal semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool checks for new shared memories from other agents since last sync, using a specific verb and resource. This distinguishes it from siblings like logicmem_memory_recall (own memories) or logicmem_a2a_write_shared (writing shared memories).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'since last sync' implies a periodic synchronization use case, but the description does not explicitly state when to use this tool versus alternatives or provide exclusion criteria. Usage context is implied rather than clearly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_a2a_write_sharedC

Write a memory to the shared A2A pool.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
textYes
agent_idYes
categoryNo
client_idYes
importanceNo
is_privateNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must fully disclose behavioral traits, but it merely states 'Write a memory' without detailing side effects, overwrite semantics, permissions, or impacts on existing shared memory. The write operation's implications (e.g., privacy, category usage) are not conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no wasted words, but it is under-specified to the point of being minimally informative. It is appropriately front-loaded but does not fully earn its place given the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This tool has 7 parameters, no annotations, no output schema, and a sparse description. The description is far too minimal to support correct invocation, especially when sibling tools differ subtly in purpose. It fails to provide essential context for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description adds no parameter meaning. It does not explain what agent_id, client_id, text, tags, category, importance, or is_private represent in the A2A context, leaving the agent to infer from names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Write') and names the resource ('memory to the shared A2A pool'), clearly distinguishing it from sibling tools like memory_recall (read) or a2a_sync. However, it does not elaborate on what 'memory' encompasses beyond the basic write action, leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as logicmem_a2a_sync or logicmem_memory_log. There is no mention of prerequisites, context, or exclusions, leaving the agent without direction for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_memory_healthA

Check if the LogicMem memory server is healthy.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates a read-only health check, but does not clarify what 'healthy' means, whether it performs a simple ping or a deeper diagnostic, or what the response format is. This is a minor gap for such a simple tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded with the purpose. It contains no fluff or redundant information, making it optimally concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with no parameters or output schema, but the description does not explain what the agent will receive in response (e.g., a boolean, status object, or error). Without an output schema, this missing return-type information leaves some incompleteness, though the core purpose is clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline score is 4 per the rubric. The description does not need to elaborate on parameter semantics since there are none.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Check if the LogicMem memory server is healthy.' It uses a specific verb ('check') and resource ('LogicMem memory server') with a well-defined outcome. This distinguishes it from sibling tools like logicmem_memory_stats or logicmem_memory_log, which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any preconditions, exclusion cases, or relationships to other logicmem tools. For a health check, the intended context is implied but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_memory_logA

Store a new memory. The agent's memory is permanent and searchable across sessions. Be specific — include who, what, when, why.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoOptional tags
textYesWhat to remember.
sourceNovoice_call | chat | email | meeting | document | manual | systemopenclaw-mcp
categoryNogeneral | client_identity | decision | preference | contract | correction | interaction | complaintgeneral
client_idNoClient ID
importanceNo1-10 importance

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It states the memory is permanent and searchable, which are key traits. However, it omits potential side effects, limits, or error behavior, leaving some uncertainty for a write operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences deliver the core purpose and key usage advice with no filler. The message is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple memory-write tool, the description adequately covers what it does and how to use it. It doesn't mention return values or error conditions, but no output schema exists and the schema already documents parameters, so the description is sufficient for typical agent interactions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaningful guidance for the 'text' parameter by advising to include who, what, when, why, which enriches the schema's minimal 'What to remember' beyond a literal reading.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Store a new memory', clearly specifying the action (store) and resource (memory). This distinguishes it from siblings like recall (retrieve) and stats (query), making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: memory is permanent and searchable across sessions, and advises to include who, what, when, why. This helps the agent decide when to store meaningful details, though it doesn't explicitly compare to alternatives like recall or outcome.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_memory_outcomeB

Record whether a stored memory was useful. Feeds the DPO training pipeline.

ParametersJSON Schema
NameRequiredDescriptionDefault
successYes
magnitudeNo
memory_idsYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the burden of behavioral disclosure. It states the intent to record memory usefulness and feed a training pipeline, but it does not mention whether the operation appends, overwrites, requires existing memory entries, or what happens with the success/magnitude values. The observable effects beyond 'record' are unclear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no redundant phrasing. It is front-loaded with the core action and purpose, and every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three parameters, no annotations, and no output schema, the description is under-specified. It lacks details on magnitude semantics, when to call the tool, return behavior, and any side effects, making it insufficient for reliable invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage, so the description must compensate. It partially maps memory_ids to stored memories and success to usefulness, but magnitude is entirely unexplained, and no value ranges or conventions are provided. This leaves a key parameter ambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Record'), the target ('whether a stored memory was useful'), and the downstream purpose ('Feeds the DPO training pipeline'). This distinguishes it from sibling tools like logicmem_memory_log (logging) and logicmem_memory_recall (retrieval).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a usage context by mentioning the DPO training pipeline, but it does not explicitly state when to use this tool versus alternatives, nor does it provide conditions or exclusions. It lacks direct guidance on when this feedback should be recorded.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_memory_recallC

Search memory for relevant entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax entries
queryYesSearch query
client_idNoClient ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description bears full weight. It discloses that this is a read (search) operation but nothing about the search mechanism, whether it uses semantic or keyword matching, or what constitutes 'relevant.' No exclusions or side effects are mentioned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no redundant words. It's appropriately concise and immediately comprehensible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description doesn't specify the return format, pagination, or how limit/client_id influence results. The lack of context about the memory domain and the relationship to sibling tools makes it incomplete for an agent deciding to call this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All three parameters have schema descriptions (query, limit, client_id), so the baseline is 3. The tool description adds no additional parameter semantics beyond what's in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a search operation targeting memory entries. It distinguishes from other sibling tools in that it's a retrieval action, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus the other memory or a2a tools. The description gives no context about what 'relevant' means or when to prefer recall over log/reflect/session.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_memory_reflectB

Self-critique: evaluate a draft answer against retrieved memories.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYes
draft_answerYes
memory_queryNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It mentions 'self-critique' but doesn't state whether the tool is read-only, whether it modifies memories, or what side effects (if any) occur. The lack of safety or mutability context is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately conveys the core purpose. It avoids redundancy and unnecessary detail, earning its place with clear, direct language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (3 parameters, no output schema, no annotations), the description is too sparse. It fails to describe return values, usage context, or parameter specifics, leaving the agent with insufficient information to correctly invoke and interpret the tool. The single-sentence description covers the purpose but not the operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not compensate. It implies that 'draft_answer' is the answer to evaluate, but it fails to explain the role of 'question' and 'memory_query'—especially memory_query, which seems optional but ambiguous. No detail is provided on how parameters relate to the evaluation process.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Self-critique: evaluate a draft answer against retrieved memories.' It uses a specific verb ('evaluate') and identifies its resource (draft answer vs. memories), distinguishing it from sibling tools like memory_recall (which retrieves) and memory_log (which writes).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as logicmem_memory_recall or logicmem_memory_outcome. It doesn't specify prerequisites, typical scenarios, or exclusions, leaving the agent to infer usage solely from the purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_memory_sessionB

Full memory session briefing — recall + sentiment + constraints + intelligence + gaps.

ParametersJSON Schema
NameRequiredDescriptionDefault
client_idNoClient ID

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It lists the components included in the briefing, which gives some insight into the tool's output, but it does not mention read-only behavior, performance characteristics, whether it aggregates data from other tools, or any side effects. This is moderate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one concise sentence with a clear front-loaded subject ('Full memory session briefing') followed by a compact list of contents. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is described as a 'full' briefing aggregating multiple aspects, but the description lacks detail on what the output looks like, the meaning of terms like 'constraints' and 'intelligence', or any caveats. With no output schema and no annotations, more explanatory text is needed to make this tool usable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter `client_id` has a schema description ('Client ID') providing 100% coverage. The tool description adds no additional meaning beyond that, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool provides a 'full memory session briefing' with a specific list of components (recall, sentiment, constraints, intelligence, gaps). This clearly identifies the resource (memory session) and distinguishes it from siblings like recall or stats, though 'briefing' is a noun rather than a strong action verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explicitly state when to use this tool versus the sibling tools. It implies a comprehensive overview but offers no guidance on when a narrower tool like recall or stats would be more appropriate, nor does it mention exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

logicmem_memory_statsA

Get memory system stats — total entries, categories, storage.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of disclosing behavior. 'Get' implies a read-only, non-destructive operation, but the description does not explicitly state this or mention any other behavioral aspects like permissions, performance, or return format beyond the listed stats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the action and provides concrete details. It is concise without sacrificing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple parameterless read-only stats tool, the description adequately covers the core purpose and output data. However, terms like 'categories' and 'storage' could be ambiguous (e.g., storage as data size vs. memory usage), so a bit more precision would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema is trivially complete (100% coverage). The description adds value by specifying what the returned stats will include (total entries, categories, storage), which the empty schema cannot convey. Baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and resource ('memory system stats'), and lists specific data points (total entries, categories, storage). This makes it distinct from sibling tools like memory_log or memory_health.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose implies usage when an overall memory system overview is needed, but there is no explicit guidance about when to use this tool versus alternatives such as memory_log or memory_health. No exclusions or alternative tool mentions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 12 tool updatesv0.1.1
    • First observedlogicmem_a2a_heartbeat
    • First observedlogicmem_a2a_list_agents
    • First observedlogicmem_a2a_register
    • First observedlogicmem_a2a_sync
    • First observedlogicmem_a2a_write_shared
    • First observedlogicmem_memory_health
    • First observedlogicmem_memory_log
    • First observedlogicmem_memory_outcome
    • First observedlogicmem_memory_recall
    • First observedlogicmem_memory_reflect
    • First observedlogicmem_memory_session
    • First observedlogicmem_memory_stats

TDQS

B3.2/5.0
Disambiguation5/5

Each tool targets a distinct operation: memory log, recall, session, stats, health, outcome, and reflect are all clearly differentiated. The A2A tools (register, heartbeat, list, write_shared, sync) also have distinct purposes with no overlap.

Naming Consistency4/5

All tools follow a consistent 'logicmem_<domain>_<action>' pattern using snake_case. Minor inconsistency arises because the final token is sometimes a noun (session, stats, health) and sometimes a verb (log, recall, reflect), but the overall structure is predictable and readable.

Tool Count5/5

12 tools is well within the ideal 3-15 range. The set covers two clear domains (memory management and A2A communication) with each tool serving a specific function, making the count feel appropriate and not bloated.

Completeness4/5

The memory lifecycle is well covered with store, search, full session briefing, stats, health, outcome feedback, and reflection. Minor gaps exist like missing memory update/delete and A2A deregistration, but these are not critical for the core workflows.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Governed shared memory platform for AI agents and agent fleets. Provides persistent memory, cross-agent knowledge sharing, permissions, audit trails, and multi-tenant isolation through a Model Context Protocol (MCP) server.
    4
    486
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides persistent memory for AI coding agents through the Model Context Protocol, enabling them to store and retrieve project knowledge across sessions.
    33
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Gives AI agents durable project memory via the Model Context Protocol, allowing them to read tasks, record decisions, search context, and sync snapshots to the cloud.
    20
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CreedLab/logicmem-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server