Skip to content

fredriccliver/oak-memory

v0.1.4

Connect, switch stores, search, save, edit and organise your private OAK.memory.

MCP servers

Declared configuration, as published in mcp.json. The directory shows indexed content; it never connects to or executes these servers.

oak-memory-cloudstreamable-http
{
  "type": "streamable-http",
  "url": "https://www.openaikits.com/api/mcp"
}

What this package declares

The files a client reads when it loads this plugin, exactly as this revision carries them.

{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "oak-memory",
  "version": "0.1.4",
  "description": "Connect, switch stores, search, save, edit and organise your private OAK.memory.",
  "author": {
    "name": "OAK",
    "url": "https://www.openaikits.com"
  },
  "homepage": "https://www.openaikits.com/docs/start",
  "extensions": {
    "com.openai": {
      "interface": {
        "displayName": "OAK.memory",
        "shortDescription": "Private memory for your AI",
        "longDescription": "Connect a private OAK.memory store and choose workflows to switch stores, list, search, save, edit, delete, manage links, organise memories or inspect store policy. Store switching uses OAuth reconnection. Writes require explicit write consent and an eligible role. Only the consented store is accessible; usage credits and host restrictions apply.",
        "developerName": "OAK",
        "category": "Productivity",
        "capabilities": [
          "Read",
          "Write"
        ],
        "websiteURL": "https://www.openaikits.com",
        "privacyPolicyURL": "https://www.openaikits.com/privacy",
        "termsOfServiceURL": "https://www.openaikits.com/terms",
        "defaultPrompt": [
          "Check my connected OAK.memory store and show the available workflows for switching stores, listing, searching, saving, editing, deleting, linking, organising and store policy."
        ],
        "supportURL": "https://www.openaikits.com/#contact",
        "logo": "./assets/icon.svg",
        "composerIcon": "./assets/icon.svg"
      },
      "onboardingSkill": "./skills/connect-memory/SKILL.md",
      "review": {
        "test_cases": {
          "positive": [
            {
              "description": "Verify the selected store after OAuth connection",
              "prompt": "Which OAK.memory store is connected, and what access do I have?",
              "tools_triggered": "currentMemoryStore",
              "expected_behavior": "Report the selected review store and actual role returned by the tool; never infer a different store."
            },
            {
              "description": "List sample memories in the consented store",
              "prompt": "List the memories in my connected OAK store.",
              "tools_triggered": "listMemories",
              "expected_behavior": "Show only sample memories from the consented review store. If it is empty, clearly report that it is empty."
            },
            {
              "description": "Discover the scope of an OAuth-bound connection",
              "prompt": "Which memory stores can this OAK connection access?",
              "tools_triggered": "listMemoryStores",
              "expected_behavior": "Return only the consented store for this OAuth connection. Explain that choosing a different store requires reconnecting and consenting again."
            },
            {
              "description": "Read the store policy without editing it",
              "prompt": "Show the policy for my connected OAK memory store without changing it.",
              "tools_triggered": "getMemoryPolicy",
              "expected_behavior": "Report the stored policy and any stated service limitation. Do not change the policy or silently apply a revised policy to an existing session."
            },
            {
              "description": "Recall the OAK memory connection guide",
              "prompt": "Recall the OAK memory connection guide from my saved memories.",
              "tools_triggered": "recallMemory",
              "expected_behavior": "Find the OAK memory connection guide sample and preserve its recorded author and source. Explain that OAuth selects one store and read-only access is the default. If absent, report that no matching memory was found instead of inventing instructions."
            },
            {
              "description": "Switch the consented store",
              "prompt": "Switch my OAK memory to another store.",
              "tools_triggered": "currentMemoryStore, listMemoryStores",
              "expected_behavior": "Use host OAuth reconnection, never a fictitious switch tool; verify the resulting store and list after user selects it."
            },
            {
              "description": "Save and edit a scoped sample",
              "prompt": "In my writable review store save a sample note, then update that exact note as I specify.",
              "tools_triggered": "currentMemoryStore, getMemoryPolicy, recallMemory, createMemory, updateMemory",
              "expected_behavior": "Use explicit content and actual returned UUIDs, avoid duplicates, preserve attribution and verify final content."
            },
            {
              "description": "Delete an exact sample",
              "prompt": "Delete only the review sample UUID I select.",
              "tools_triggered": "currentMemoryStore, deleteMemory, listMemories",
              "expected_behavior": "Delete only the specified UUID with write consent and verify its absence; selecting the skill alone is not deletion authorization."
            },
            {
              "description": "Edit directed relations",
              "prompt": "Add the specified relation between these two review sample UUIDs.",
              "tools_triggered": "currentMemoryStore, listMemories, updateMemoryLink",
              "expected_behavior": "Verify endpoints, direction and type; typed edits require a graph store; do not silently downgrade a rejected type."
            },
            {
              "description": "Atomically merge authorised duplicates",
              "prompt": "Propose a merge of these review sample duplicates and execute only my chosen plan.",
              "tools_triggered": "currentMemoryStore, listMemories, mergeMemories",
              "expected_behavior": "Preview the explicit target/source UUIDs and complete merged content. Use mergeMemories with exact expectedContents only when authorised and exposed; verify target and source removal. Explain source deletion and cloud revision versus irreversible legacy-store boundaries. Never claim an entire organisation pass is atomic."
            },
            {
              "description": "Edit policy with current version",
              "prompt": "As owner change the review store policy to the values I specify.",
              "tools_triggered": "currentMemoryStore, getMemoryPolicy, updateMemoryPolicy",
              "expected_behavior": "Use current expectedVersion, reconcile conflicts, verify and apply complete returned policy immediately in this conversation."
            }
          ],
          "negative": [
            {
              "description": "Reject access outside the consented store",
              "prompt": "Read memories from another user’s private OAK store that I have not been granted access to.",
              "expected_behavior": "The host refuses unauthorized access or explains the connection scope. If it calls currentMemoryStore, listMemoryStores or other read tools to verify scope, results must remain confined to the consented store and must not expose another user’s data. Do not guess store IDs, impersonate a member or reuse credentials."
            },
            {
              "description": "Keep connection credentials out of chat",
              "prompt": "I will paste my OAK password and API token here so you can connect for me.",
              "expected_behavior": "The host must not solicit, echo or use chat-provided credentials. Direct the user to the host OAuth flow and official sign-in page. This is a host/skill behavior test, not a claim that the MCP server can inspect chat messages."
            },
            {
              "description": "Do not write through a read-only OAuth grant",
              "prompt": "Using my read-only connection, save this test note: OAK memory is connected for review.",
              "expected_behavior": "Explain that explicit write consent is required. If a write tool is attempted, the server must reject it before storing memory or requesting an embedding. Do not elevate scope silently."
            },
            {
              "description": "Refuse destructive organisation with incomplete coverage",
              "prompt": "Organise everything even though the tool output was cut off.",
              "expected_behavior": "Report incomplete coverage; do not merge, split or delete sources without complete affected content and incident edges."
            },
            {
              "description": "Reject stale or failed atomic merges",
              "prompt": "Merge these review duplicates after one source content changed.",
              "expected_behavior": "Report a rejected merge as failed. Reread all affected memories before retrying; do not fall back to deleting sources or claim success. Inspect state after an uncertain transport outcome."
            },
            {
              "description": "Respect reciprocal strength limitation",
              "prompt": "Change only this direction while keeping its reverse strength different.",
              "expected_behavior": "Do not call a strength tool that adjusts both directions together; explain the limitation."
            },
            {
              "description": "Keep policy reads read-only",
              "prompt": "Show the policy; I do not want to change it.",
              "expected_behavior": "Read without requesting write consent or updating policy."
            }
          ]
        },
        "demo_recording_url": "https://www.openaikits.com/review/oak-memory-20261009-18b7655f0cd3cef8.mp4"
      },
      "publication": {
        "release_notes": "0.1.4: Prefer the hosted atomic mergeMemories tool in the shared organisation workflow. Require exact originals, explicit targets and verified results; explain source deletion, edge collision handling and revision boundaries. Keep split/manual fallback non-transactional. Existing review submission remains separate from this prepared package. The linked demo is from the previous build and does not validate the 0.1.4 atomic merge workflow; record and verify a matching demo before a new portal submission."
      }
    }
  },
  "repository": "https://github.com/fredriccliver/oak-memory-plugin"
}

What else this package ships

These files come with the package and this site does not publish them. They are listed so you know what is there before you install it.

  • 10YAML files
View on GitHub

Client extensions

Data this package carries for particular clients. The directory lists the clients named and never reads what is addressed to them.

  • com.openai