Skip to content

Bug: memory_capabilities returns plain text instead of structured JSON #213

Description

@guolvlin-cn

Summary

memory_capabilities MCP tool returns a plain-text response (comma-separated tool list) instead of the structured content array expected by MCP protocol. This breaks clients that try to parse the response as JSON.

Environment

  • Server: https://api.thememoria.ai (production)
  • MCP endpoint: POST /mcp (JSON-RPC 2.0)
  • Date observed: 2026-06-01

Steps to Reproduce

curl -X POST https://api.thememoria.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"memory_capabilities","arguments":{}}}'

Expected: MCP-standard response with structured result.content array, each block being parseable JSON or at least well-defined typed blocks.

Actual:

{
  "result": {
    "content": [
      {
        "text": "Available tools: memory_store, memory_retrieve, memory_search, memory_correct, memory_purge, memory_profile, memory_list, memory_capabilities, memory_...",
        "type": "text"
      }
    ]
  }
}

The text is a single concatenated string. The tool list is also truncated (ends with memory_... — looks like 80-char cap or similar).

Impact

  • Truncation: List is cut off mid-name; clients cannot discover the full toolset
  • No structure: Cannot reliably split by delimiter (tool names may legitimately contain commas in future)
  • No metadata: No descriptions, schemas, or version info — just names
  • Inconsistent: Other tools return proper content arrays; this one is text only

Workaround

const text = result.content[0].text;  // "Available tools: ..."
const tools = text.replace('Available tools: ', '').split(', ').map(s => s.trim());
// But truncated list may miss recent additions

Proposed Fix

Return structured JSON:

{
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"tools\":[{\"name\":\"memory_store\",\"description\":\"...\"}, ...]}"
      }
    ]
  }
}

Or better, use type: "json" block if MCP supports it.

Minimum: don't truncate the list.

Related

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions