Developer Documentation

PG-Memory Docs

Source-driven integration docs for REST APIs, MCP transport, and OAuth connector flows.

21 REST endpoints14 MCP toolsCanonical URL: /docs

Overview

PG-Memory exposes a developer-first integration surface: authenticated REST endpoints for content operations, MCP transport for agents, and OAuth-backed Claude Connect for managed connectors.

REST + MCP
Use REST for product workflows and MCP for agent-native tools with structured responses.
Protocol Compatibility
Supports 2025-11-25, 2025-06-18, 2025-03-26 with session-aware HTTP transport.

Quickstart

REST Base
https://memory-api.pragmaticgrowth.com/api
MCP Endpoint
https://memory-api.pragmaticgrowth.com/mcp
Claude Connect Endpoint
Authentication Headers

Sign in to access the API. You can still review the exact header formats below.

Accepted Auth Headers

Authorization: Bearer YOUR_API_KEY
X-API-Key: YOUR_API_KEY
Sign In

HTTP MCP Client Configuration

{
  "mcpServers": {
    "pg-memory": {
      "type": "http",
      "url": "https://memory-api.pragmaticgrowth.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

STDIO MCP Client Configuration

{
  "mcpServers": {
    "pg-memory": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@pragmatic-growth/memory-mcp"],
      "env": {
        "API_KEY": "YOUR_API_KEY",
        "MCP_SERVER_URL": "https://memory-api.pragmaticgrowth.com/mcp"
      }
    }
  }
}

REST API Example

curl "https://memory-api.pragmaticgrowth.com/api/search?query=Form%205472&limit=5" \
  -H "Authorization: Bearer YOUR_API_KEY"

Connect to Claude

Connect your PG-Memory knowledge base to Claude as a custom connector. After setup, Claude can search, create, and manage your articles directly.

Sign in to view connector credentials

Sign in to your PG-Memory account to see the connector setup values.

Sign In

REST API

Search, inspect, and filter endpoint contracts by auth mode and surface area.

21 endpoints

Articles

Knowledge base content management endpoints.

GETAPI Key / Bearer
List Articles/api/articles

List articles with pagination, filtering, and search query support.

Response Example

{
  "articles": [
    {
      "id": "art_123",
      "title": "Form 5472 Guide",
      "summary": "Summary text..."
    }
  ],
  "pagination": {
    "limit": 20,
    "offset": 0,
    "page": 1,
    "pageSize": 20,
    "total": 42,
    "hasMore": true
  }
}

Error Responses

401Missing or invalid API key
View Schemas

Query Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 200
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "pageSize": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 200
    },
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "category": {
      "type": "string"
    },
    "orderBy": {
      "default": "updated_at",
      "type": "string",
      "enum": [
        "created_at",
        "updated_at"
      ]
    },
    "orderDir": {
      "default": "DESC",
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    }
  },
  "required": [
    "orderBy",
    "orderDir"
  ],
  "additionalProperties": false
}
GETAPI Key / Bearer
Get Article/api/articles/:id

Fetch a single article by ID.

Response Example

{
  "id": "art_123",
  "title": "Form 5472 Guide",
  "content": "# Overview"
}

Error Responses

401Missing or invalid API key
404Article not found
View Schemas

Path Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
POSTAPI Key / Bearer
Create Article/api/articles

Create an article and optionally auto-generate metadata.

Response Example

{
  "id": "art_123",
  "title": "New Article",
  "created_at": "2026-02-17T00:00:00.000Z"
}

Error Responses

401Missing or invalid API key
View Schemas

Request Body Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "content": {
      "type": "string",
      "minLength": 1
    },
    "summary": {
      "type": "string"
    },
    "category_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "metadata": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "generateMetadata": {
      "default": true,
      "type": "boolean"
    },
    "gapQueryId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "title",
    "content",
    "generateMetadata"
  ],
  "additionalProperties": false
}
PUTAPI Key / Bearer
Update Article/api/articles/:id

Update article fields and optionally regenerate embeddings.

Response Example

{
  "id": "art_123",
  "title": "Updated Title",
  "updated_at": "2026-02-17T00:00:00.000Z"
}

Error Responses

401Missing or invalid API key
404Article not found
View Schemas

Path Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Request Body Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "content": {
      "type": "string",
      "minLength": 1
    },
    "summary": {
      "type": "string"
    },
    "category_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "metadata": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "regenerateEmbedding": {
      "default": true,
      "type": "boolean"
    },
    "version": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    }
  },
  "required": [
    "regenerateEmbedding"
  ],
  "additionalProperties": false
}
DELETEAPI Key / Bearer
Delete Article/api/articles/:id

Delete an article permanently.

Response Example

{
  "status": "deleted"
}

Error Responses

401Missing or invalid API key
404Article not found
View Schemas

Path Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Categories

Category CRUD endpoints used for organizing articles and Q&A.

GETAPI Key / Bearer
List Categories/api/categories

List all categories for the authenticated user.

Response Example

{
  "categories": [
    {
      "id": "cat_123",
      "slug": "tax",
      "name": "Tax",
      "color": "#16A34A",
      "article_count": 12
    }
  ]
}

Error Responses

401Missing or invalid API key
GETAPI Key / Bearer
Get Category/api/categories/:id

Fetch a single category by ID.

Response Example

{
  "id": "cat_123",
  "slug": "tax",
  "name": "Tax"
}

Error Responses

401Missing or invalid API key
404Category not found
View Schemas

Path Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
POSTAPI Key / Bearer
Create Category/api/categories

Create a new category.

Response Example

{
  "id": "cat_123",
  "slug": "tax",
  "name": "Tax"
}

Error Responses

401Missing or invalid API key
View Schemas

Request Body Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255
    },
    "description": {
      "type": "string"
    },
    "color": {
      "type": "string",
      "pattern": "^#[0-9A-F]{6}$"
    },
    "display_order": {
      "type": "number"
    }
  },
  "required": [
    "slug",
    "name"
  ],
  "additionalProperties": false
}
PUTAPI Key / Bearer
Update Category/api/categories/:id

Update an existing category by ID.

Response Example

{
  "id": "cat_123",
  "slug": "tax",
  "name": "Tax Filing"
}

Error Responses

401Missing or invalid API key
404Category not found
View Schemas

Path Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Request Body Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255
    },
    "description": {
      "type": "string"
    },
    "color": {
      "type": "string",
      "pattern": "^#[0-9A-F]{6}$"
    },
    "display_order": {
      "type": "number"
    }
  },
  "additionalProperties": false
}
DELETEAPI Key / Bearer
Delete Category/api/categories/:id

Delete a category when it has no attached content.

Response Example

{
  "status": "deleted"
}

Error Responses

401Missing or invalid API key
404Category not found
409Category is still referenced by content
View Schemas

Path Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Q&A

Q&A and gap-management REST endpoints.

GETAPI Key / Bearer
List Q&A Records/api/qa

List Q&A records with pagination, filtering, and analytics stats.

Response Example

{
  "items": [
    {
      "id": "qa_123",
      "question": "What is Form 5472?",
      "status": "approved"
    }
  ],
  "pagination": {
    "limit": 20,
    "offset": 0,
    "total": 120,
    "hasMore": true
  }
}

Error Responses

401Missing or invalid API key
View Schemas

Query Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 200
    },
    "offset": {
      "type": "integer",
      "minimum": 0,
      "maximum": 9007199254740991
    },
    "page": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "pageSize": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 200
    },
    "q": {
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "status": {
      "type": "string",
      "enum": [
        "gap",
        "draft",
        "approved"
      ]
    },
    "statuses": {
      "type": "string"
    },
    "category": {
      "type": "string"
    },
    "source": {
      "type": "string"
    },
    "orderBy": {
      "default": "created_at",
      "type": "string",
      "enum": [
        "created_at",
        "updated_at",
        "approved_at"
      ]
    },
    "orderDir": {
      "default": "DESC",
      "type": "string",
      "enum": [
        "ASC",
        "DESC"
      ]
    },
    "relatedArticleId": {
      "type": "string"
    }
  },
  "required": [
    "orderBy",
    "orderDir"
  ],
  "additionalProperties": false
}
GETAPI Key / Bearer
Get Q&A Record/api/qa/:id

Get a single Q&A record by ID.

Response Example

{
  "id": "qa_123",
  "question": "What is Form 5472?",
  "status": "approved"
}

Error Responses

401Missing or invalid API key
404Q&A not found
View Schemas

Path Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
POSTAPI Key / Bearer
Create Q&A Record/api/qa

Create a new Q&A record and generate embedding when possible.

Response Example

{
  "id": "qa_123",
  "question": "What is Form 5472?",
  "status": "draft"
}

Error Responses

401Missing or invalid API key
View Schemas

Request Body Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "question": {
      "type": "string",
      "minLength": 1
    },
    "answer": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "gap",
        "draft",
        "approved"
      ]
    },
    "source": {
      "type": "string",
      "enum": [
        "email",
        "chat",
        "mcp",
        "manual"
      ]
    },
    "related_article_id": {
      "type": "string"
    },
    "category_id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "metadata": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    },
    "gapQueryId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    }
  },
  "required": [
    "question"
  ],
  "additionalProperties": false
}
PUTAPI Key / Bearer
Update Q&A Record/api/qa/:id

Update fields for an existing Q&A record.

Response Example

{
  "id": "qa_123",
  "status": "approved"
}

Error Responses

401Missing or invalid API key
404Q&A not found
View Schemas

Path Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Request Body Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "question": {
      "type": "string",
      "minLength": 1
    },
    "answer": {
      "type": "string"
    },
    "status": {
      "type": "string",
      "enum": [
        "gap",
        "draft",
        "approved"
      ]
    },
    "source": {
      "type": "string",
      "enum": [
        "email",
        "chat",
        "mcp",
        "manual"
      ]
    },
    "related_article_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "category_id": {
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "metadata": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "additionalProperties": false
}
DELETEAPI Key / Bearer
Delete Q&A Record/api/qa/:id

Delete a Q&A record permanently.

Response Example

{
  "status": "deleted"
}

Error Responses

401Missing or invalid API key
404Q&A not found
View Schemas

Path Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
POSTAPI Key / Bearer
Batch Update Q&A/api/qa/batch

Apply status/category/related-article changes to many Q&A IDs.

Response Example

{
  "updated": 3,
  "requested": 3
}

Error Responses

401Missing or invalid API key
View Schemas

Request Body Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "ids": {
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1
      }
    },
    "changes": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "enum": [
            "gap",
            "draft",
            "approved"
          ]
        },
        "category_id": {
          "anyOf": [
            {
              "type": "string",
              "format": "uuid",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
            },
            {
              "type": "null"
            }
          ]
        },
        "related_article_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ]
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "ids",
    "changes"
  ],
  "additionalProperties": false
}
POSTAPI Key / Bearer
Suggest Q&A Draft/api/qa/suggest-draft

Generate a suggested answer draft using retrieval + LLM.

Response Example

{
  "draft": "## Draft Answer",
  "confidence": "medium",
  "sources": []
}

Error Responses

401Missing or invalid API key
View Schemas

Request Body Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "question": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2000
    },
    "maxSources": {
      "default": 5,
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 10
    }
  },
  "required": [
    "question",
    "maxSources"
  ],
  "additionalProperties": false
}

Search

Semantic search API endpoint for direct integration.

GETAPI Key / Bearer
Run Semantic Search/api/search

Perform hybrid semantic + FTS5 search over articles and approved Q&A.

Response Example

{
  "results": [
    {
      "id": "art_123",
      "type": "article",
      "title": "Form 5472",
      "score": 0.83
    }
  ],
  "maxSimilarity": 0.83,
  "isAnswered": true,
  "latencyMs": 94
}

Error Responses

400Validation error
401Missing or invalid API key
View Schemas

Query Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1
    },
    "threshold": {
      "default": 0.6,
      "type": "number",
      "minimum": 0,
      "maximum": 1
    },
    "limit": {
      "default": 5,
      "type": "number",
      "minimum": 1,
      "maximum": 50
    }
  },
  "required": [
    "query",
    "threshold",
    "limit"
  ],
  "additionalProperties": false
}

Query Logs

Query and gap analytics endpoints.

GETAPI Key / Bearer
List Query Logs/api/logs

List recent query logs with related retrieved article titles.

Response Example

{
  "queries": [
    {
      "id": "log_123",
      "query": "Form 5472 due date",
      "is_answered": true
    }
  ],
  "total": 1
}

Error Responses

401Missing or invalid API key
View Schemas

Query Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "days": {
      "default": 7,
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 365
    },
    "limit": {
      "default": 100,
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 500
    }
  },
  "required": [
    "days",
    "limit"
  ],
  "additionalProperties": false
}
GETAPI Key / Bearer
Get Query Log/api/logs/:id

Get one query log item by ID.

Response Example

{
  "gap": {
    "id": "log_123",
    "query": "Unanswered question",
    "is_answered": false
  }
}

Error Responses

401Missing or invalid API key
404Query log not found
View Schemas

Path Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

Health

Public health and readiness endpoint.

GETPublic
Health Check/api/health

Return application and database health status.

  • This endpoint is publicly accessible.

Response Example

{
  "status": "healthy",
  "version": "4.0.0",
  "database": {
    "connected": true,
    "articleCount": 150,
    "categoryCount": 12
  }
}

MCP Protocol

Default: 2025-11-252025-11-252025-06-182025-03-26Session TTL: 1800s
GET/mcpapi-key

MCP server discovery and optional session lookup.

  • Unauthenticated discovery is allowed when no session id is provided.
POST/mcpapi-key

MCP JSON-RPC handler for initialize, tools/list, tools/call, and ping.

DELETE/mcpapi-key

Delete an MCP session by mcp-session-id header.

Transport Capabilities
  • tools/list and tools/call over JSON-RPC 2.0
  • tool responses include structuredContent and outputSchema
  • session-based transport with KV-backed inactivity expiration

MCP Tools

14 tools
MCP Toolsearch
search

Search knowledge base by semantic similarity

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 3,
      "description": "Search query"
    },
    "threshold": {
      "default": 0.6,
      "description": "Similarity threshold (0-1)",
      "type": "number",
      "minimum": 0,
      "maximum": 1
    },
    "limit": {
      "default": 5,
      "description": "Max results",
      "type": "number",
      "minimum": 1,
      "maximum": 50
    }
  },
  "required": [
    "query",
    "threshold",
    "limit"
  ],
  "additionalProperties": false
}
MCP Toolget_article
get_article

Retrieve full article content by ID

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Article ID (e.g., art_...)"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
MCP Toolget_qa
get_qa

Retrieve a Q&A record by ID

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Q&A ID (e.g., qa_...)"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
MCP Toollog_gap
log_gap

Log an unanswered question as a knowledge gap

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "question": {
      "type": "string",
      "minLength": 10,
      "maxLength": 2000,
      "description": "The unanswered question"
    },
    "context": {
      "description": "Additional context (email subject, sender, etc)",
      "type": "string",
      "maxLength": 1000
    },
    "source": {
      "default": "mcp",
      "description": "Question source",
      "type": "string",
      "enum": [
        "mcp",
        "email",
        "chat"
      ]
    }
  },
  "required": [
    "question",
    "source"
  ],
  "additionalProperties": false
}
MCP Toollist_categories
list_categories

List all knowledge base categories

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
MCP Toolhealth_check
health_check

Check knowledge base health status

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
MCP Toollist_gaps
list_gaps

List unanswered knowledge gaps

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "limit": {
      "default": 20,
      "description": "Max results",
      "type": "number",
      "minimum": 1,
      "maximum": 100
    },
    "offset": {
      "default": 0,
      "description": "Pagination offset",
      "type": "number",
      "minimum": 0
    }
  },
  "required": [
    "limit",
    "offset"
  ],
  "additionalProperties": false
}
MCP Toolcreate_article
create_article

Create a new article with auto-embedding

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "title": {
      "type": "string",
      "minLength": 1,
      "description": "Article title"
    },
    "content": {
      "type": "string",
      "minLength": 1,
      "description": "Full article content (markdown)"
    },
    "summary": {
      "description": "Article summary",
      "type": "string"
    },
    "category_id": {
      "description": "Category UUID",
      "type": "string"
    },
    "metadata": {
      "description": "Additional metadata",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "title",
    "content"
  ],
  "additionalProperties": false
}
MCP Toolupdate_article
update_article

Update an existing article

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Article ID"
    },
    "title": {
      "description": "New title",
      "type": "string"
    },
    "content": {
      "description": "New content",
      "type": "string"
    },
    "summary": {
      "description": "New summary",
      "type": "string"
    },
    "category_id": {
      "description": "New category UUID (null to remove)",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ]
    },
    "metadata": {
      "description": "New metadata",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
MCP Toolcreate_qa
create_qa

Create a new Q&A record

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "question": {
      "type": "string",
      "minLength": 1,
      "description": "The question"
    },
    "answer": {
      "description": "The answer (optional for gaps)",
      "type": "string"
    },
    "status": {
      "default": "gap",
      "description": "Q&A status",
      "type": "string",
      "enum": [
        "gap",
        "draft",
        "approved"
      ]
    },
    "source": {
      "default": "manual",
      "description": "Question source",
      "type": "string",
      "enum": [
        "email",
        "chat",
        "mcp",
        "manual"
      ]
    },
    "related_article_id": {
      "description": "Related article ID",
      "type": "string"
    },
    "category_id": {
      "description": "Category UUID",
      "type": "string"
    },
    "metadata": {
      "description": "Additional metadata",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "question",
    "status",
    "source"
  ],
  "additionalProperties": false
}
MCP Tooldraft_qa_answer
draft_qa_answer

Save or update a Q&A answer draft

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Q&A ID"
    },
    "answer": {
      "type": "string",
      "minLength": 1,
      "description": "The drafted answer"
    }
  },
  "required": [
    "id",
    "answer"
  ],
  "additionalProperties": false
}
MCP Toolapprove_qa
approve_qa

Approve a Q&A record

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Q&A ID to approve"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
MCP Tooldelete_article
delete_article

Permanently delete an article

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Article ID to delete"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}
MCP Tooldelete_qa
delete_qa

Permanently delete a Q&A record

Input Schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Q&A ID to delete"
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false
}

OAuth

Metadata Endpoints

Authorization Server: /.well-known/oauth-authorization-server

Protected Resource: /.well-known/oauth-protected-resource

Scopes: mcp:tools

Token Flow Endpoints

Authorize: https://memory-api.pragmaticgrowth.com/oauth/authorize

Token: https://memory-api.pragmaticgrowth.com/oauth/token

Revoke: https://memory-api.pragmaticgrowth.com/oauth/revoke

Troubleshooting

401 errors: Verify your API key and header format (Authorization: Bearer ... or X-API-Key).

MCP session errors: Re-run initialize or clear stale session ids in your client config.

OAuth connector issues: validate OAuth metadata paths and allowed redirect URIs.

Need runtime status? Open API health.