Skip to main content
Glama
FilippoPilo

cortex-connector

Cortex โ€” Semantic Memory for AI Agents

One external brain, model-agnostic, in production. Connect it to Claude in two minutes โ€” free trial, no credit card.

Cortex is a patent-pending semantic memory infrastructure developed by SKYNETLAB (Bergamo, Italy). Connected to your AI assistant as a remote MCP connector, it lets your conversations save decisions, context and sources โ€” and find them again in every later session. Your AI remembers, and can show why it remembers.

๐ŸŒ Website: skynetlab-cortex.com ยท ๐Ÿ“„ Patent ยท ๐Ÿ“Š Benchmark ยท ๐Ÿ“š Paper ยท ๐Ÿ’ถ Pricing

MCP Registry Listed on mcpservers.org

๐Ÿ‡ฎ๐Ÿ‡น Versione italiana: README.it.md

Cortex โ€” one external brain, shared by all your AIs


Why Cortex is not "just another memory plugin"

Most memory tools for AI agents record what the agent did and retrieve similar text later. Cortex models what is true and how reliable it is:

Capability

What it means

Quality Gate on write

Every memory passes a novelty/redundancy check before being stored. No junk accumulation.

Typed claims & conflict tracking

Facts are extracted as claims; contradictions between memories are detected and tracked, not silently overwritten.

Knowledge graph

Memories are linked by entities and typed relations, not just vector similarity.

Coherence metric (ฮจ_C)

Each memory carries a native coherence score โ€” the system knows how well a memory fits what it already knows.

Memory consolidation ("REM")

A continuous background cycle consolidates episodic memories into long-term knowledge.

Transparent evidence

Answers can cite the memories and sources they come from.

Cortex runs on globally distributed edge infrastructure operated in the European Union. The memory engine is covered by Italian patent application UIBM 102026000014026 (filed 15 May 2026).

Related MCP server: memory-mcp

Quick start โ€” Claude (web / desktop / mobile)

Requirements: a Claude plan that supports custom connectors (the "Connectors" entry appears in Settings). No Cortex account needed beforehand โ€” it is created on first sign-in.

  1. In Claude open Settings โ†’ Connectors โ†’ Add custom connector

  2. Paste this URL and confirm:

    https://skynetlab-cortex-saas-mcp.cortex-320.workers.dev/mcp
  3. Authorize access on the Cortex consent page (Google or email sign-in). Your personal memory space is created automatically, isolated from every other user.

That's it. Talk to Claude as usual: "Remember that we chose supplier X", "what did we decide about the budget?", "show me the sources for this claim". Claude picks the right tool on its own.

Quick start โ€” Claude Code

claude mcp add --transport http cortex https://skynetlab-cortex-saas-mcp.cortex-320.workers.dev/mcp

Then authenticate when prompted (/mcp shows connection status).

Quick start โ€” other MCP clients (stdio bridge)

For MCP clients that don't support remote connectors natively, use the mcp-remote bridge. Example configuration (see examples/):

{
  "mcpServers": {
    "cortex": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://skynetlab-cortex-saas-mcp.cortex-320.workers.dev/mcp"]
    }
  }
}

Quick start โ€” this repository as a local stdio server

This repository also ships a small stdio MCP server (server/) that exposes the Cortex tools locally and forwards every call to the hosted service. It is meant for MCP clients, registries and evaluators that need a local process: it starts, lists its seven tools and answers introspection with no configuration at all; tool calls are forwarded when an access token is set.

git clone https://github.com/FilippoPilo/cortex-connector.git
cd cortex-connector
npm install
CORTEX_ACCESS_TOKEN=<your token> node server/index.js

Or with Docker:

docker build -t cortex-connector .
docker run -i --rm -e CORTEX_ACCESS_TOKEN=<your token> cortex-connector

Variable

Meaning

CORTEX_ACCESS_TOKEN

Bearer token for the hosted connector (the OAuth access token issued at sign-in, for example the one mcp-remote stores). Optional: without it the server only lists tools.

CORTEX_MCP_URL

Remote endpoint, defaults to the hosted Cortex connector.

npm test runs a self test (initialize, tools/list, one call without token).

The seven tools

Tool

Type

Description

Search memories

read

Semantic search across your memories

Fetch memory

read

Full detail of one memory, with its sources

Recall & synthesize

read

Narrative synthesis of what Cortex knows about a topic

Show conflicts

read

Tracked contradictions between memories

Save memory

write

Stores a memory โ€” after a quality check against duplicates and redundancy

Write status

read

Outcome of a queued save: quality-gate verdict and any open conflicts

Forget memory

destructive

Deletes a memory โ€” always with explicit confirmation

Data & privacy

Memories are personal: each user only sees their own. They are exportable and deletable on request, and the infrastructure operates in the European Union. Details: Privacy Policy.

To disconnect, simply remove the connector from your client's settings; your memories remain in your Cortex account until you request their deletion.

Is this open source?

The Cortex memory engine is a hosted, patent-pending service โ€” its source code is not published. This repository contains the public documentation, the client-side configuration examples and a small stdio bridge (server/) for connecting to it. Everything in this repository is released under the MIT License.

Support

๐Ÿ“ง info@skynetlab.net ยท Contact page


Cortex is a SKYNETLAB product โ€” independent research lab & deeptech studio, Bergamo, Italy. Founder: Filippo Pilotta (ORCID 0009-0000-5002-4199).

Some content and product outputs are generated or assisted by artificial intelligence, pursuant to Art. 50 of Reg. (EU) 2024/1689. AI transparency.

Available Tools

7 tools
cortex_conflictsShow conflictsA
Read-only
Inspect

Show the contradictions detected between memories, with their open or resolved state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds useful output context ('open or resolved state') but does not disclose other behavioral traits such as pagination, ordering, or whether all conflicts are returned. With annotations carrying the safety profile, this is adequate.

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 concise sentence, front-loaded with the action verb, with no filler or redundant wording. Every word contributes meaning.

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 parameterless, read-only list tool, the description covers what it does and the state field. It does not describe the return format or ordering, but with no output schema and no parameters, this is largely sufficient. A minor gap is no mention of whether it returns all conflicts or requires prior setup.

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 input schema is empty (0 parameters), so the description has no parameter burden. The baseline of 4 applies, and the description does not need to explain any parameters.

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 states a specific verb ('Show') and a specific resource ('contradictions detected between memories'), and adds the state detail ('open or resolved'). This clearly distinguishes it from sibling tools like search or cortex_recall, which are broader memory retrieval operations.

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 given on when to use this tool versus alternatives. It does not mention that this is the dedicated tool for conflict inspection, nor does it contrast with search or cortex_recall. The agent must infer usage from the name and description alone.

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

cortex_forgetForget memoryA
Destructive
Inspect

Delete a memory given its id. Ask the user for explicit confirmation first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesid of the memory to delete

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark destructiveHint=true, and the description reinforces this with 'Delete'. It adds a valuable behavioral ruleโ€”'Ask the user for explicit confirmation first'โ€”which is not present in annotations or schema and is essential for safe invocation.

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, purposeful sentences. It front-loads the primary action and immediately follows with the critical safety instruction. There is no redundant or filler content.

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 one-parameter destructive tool, the description covers the essential call conditions: the target id and the mandatory user confirmation. It omits return values or error behavior, but given the absence of an output schema and the simple nature of the operation, this is acceptable.

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 input schema already fully describes the single parameter ('id of the memory to delete') with 100% coverage. The description merely echoes 'given its id' without adding format, source, or additional lifecycle details, so it meets the baseline but no more.

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 states a concrete action ('Delete') and a specific resource ('a memory given its id'), making it clear what the tool does. This clearly distinguishes it from sibling read/write tools like cortex_recall, cortex_write, search, and fetch.

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?

It identifies a clear precondition: the agent must ask the user for explicit confirmation before calling. It also implies usage context by specifying that an id is required. However, it does not explicitly name alternatives or state when-not-to-use, which would elevate it to a 5.

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

cortex_recallRecall & synthesizeA
Read-only
Inspect

Narrative synthesis of what the user's memory knows about a topic, with the current state and what was superseded. Use it for questions like 'what do you know about X' or 'what is the current state of X'.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesTopic or question

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true and openWorldHint=true, and the description adds meaningful behavioral detail: it synthesizes memory narratively, includes both current and superseded states. This goes beyond the annotations by revealing what kind of output to expect.

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 tight sentences with no filler. The first sentence defines the tool's core behavior, and the second provides concrete invocation examples. Everything 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 single-parameter, annotation-rich tool, the description covers what it does, what it returns conceptually, and when to use it. It could add a note about what happens when the memory has no knowledge of the topic, but this is a minor gap given the openWorldHint annotation.

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 coverage is 100% for the single 'query' parameter, which already documents it as 'Topic or question'. The description reinforces this with example questions but does not add substantial new parameter-level meaning, so the baseline of 3 applies.

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 a specific verb ('Recall') and resource ('what the user's memory knows about a topic'), and further clarifies the output is a 'narrative synthesis' that includes current state and superseded information. This differentiates it from siblings like cortex_forget or cortex_write, even without naming them.

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 gives explicit usage triggers: questions like 'what do you know about X' or 'what is the current state of X'. It does not explicitly contrast with alternatives such as search or fetch, so it stops short of a full when-not-to-use guide.

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

cortex_writeSave memoryAInspect

Save to the user's persistent memory (Cortex), on your own initiative while the conversation goes on: decisions and the reason behind them, stable facts about the person and their work, preferences and constraints they state, conclusions reached after effort, mistakes made and what they cost. Every write passes a quality gate: duplicates are rejected by the server and a refused write is not an error. Never save passwords, tokens, keys or card numbers.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
basisNo'observed' if read from a concrete source (document, tool output, real data), 'inferred' if it is a deduction or an estimate.
titleYesShort title
claimsNoOptional. Atomic facts already structured, one per decision or statement; if given, conflict detection uses them directly. Example: {subject: 'Project Vega', predicate: 'adopts', object: 'Redis'}.
contentYesText to remember, in the user's language

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false), the description discloses valuable behavior: writes are proactive, every write passes a server-side quality gate, duplicate writes are rejected, and a refused write is not an error. It also imposes a hard security constraint on content. These are precisely the behavioral traits an agent needs to interpret outcomes correctly. No contradiction with annotations exists.

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?

Three sentences, each earning its place: the first defines purpose and content scope, the second explains the quality-gate behavior, the third states the security prohibition. The core action is front-loaded. Despite being longer than average, the density is justified given the judgment-heavy nature of deciding what to write.

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 moderately complex tool (5 params, no output schema, no nested objects), the description covers when to invoke, what to write, what to avoid, and edge-case behavior (refused writes). The single notable gap is that no output schema exists and the description does not state what a successful write returns. Given the richness of the annotations and schema, this is a minor omission rather than a functional gap.

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 80%, so the schema already documents title, content, claims, and basis in detail (including an example for claims). The description adds marginal semantic value by enumerating the kinds of content worth composing, which indirectly informs the content parameter, but it does not explain the undocumented 'tags' parameter. Since the schema carries most of the load, the baseline of 3 is appropriate.

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 a specific verb+resource pair ('Save to the user's persistent memory (Cortex)') and immediately clarifies what counts as worth saving: decisions, stable facts, preferences, constraints, conclusions, and mistakes. It also states what must never be saved (passwords, tokens, keys, card numbers), making the tool's scope unambiguous. This clearly distinguishes it from siblings like cortex_recall, cortex_forget, and cortex_write_status.

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?

'on your own initiative while the conversation goes on' gives explicit when-to-use direction: the agent should write proactively, not only when asked. The description also gives a when-not boundary ('Never save passwords, tokens, keys or card numbers') and implies that duplicate-checking is unnecessary because the server rejects duplicates. However, it never names sibling alternatives (e.g., cortex_recall for retrieving, cortex_forget for deleting), so the differentiation is contextual rather than explicit.

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

cortex_write_statusWrite statusA
Read-only
Inspect

Outcome of a save that cortex_write returned as queued: verdict of the quality gate and any open conflicts.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesjob_id returned by cortex_write

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint and destructiveHint, so the description doesn't need to repeat safety. It describes the returned data (verdict and conflicts) but doesn't mention potential edge cases like job not found or whether it's a one-time check vs. pollable. The openWorldHint annotation adds some context but isn't elaborated.

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?

One sentence with no filler. It efficiently conveys the tool's purpose, input, and output in a compact form.

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?

Given there is no output schema, the description specifies what is returned (quality gate verdict and open conflicts), which is sufficient. It could mention error handling or whether the status is immediate, but these are not critical gaps given the simple nature of the tool.

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

Parameters5/5

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

The only parameter, job_id, is clearly described as 'job_id returned by cortex_write', explaining its provenance and usage. Schema coverage is 100%, and no additional clarification is needed.

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 tool reports the outcome of a queued write, specifically the quality gate verdict and open conflicts. It distinguishes itself from cortex_write by referencing that cortex_write returned a queued status, though it doesn't explicitly name a sibling tool for differentiation.

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?

It implies usage after cortex_write returns a queued job, but doesn't explicitly state 'use this when you have a job_id from cortex_write' or contrast with alternatives like cortex_conflicts. The context is present but not made explicit.

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

fetchFetch memoryA
Read-only
Inspect

Fetch the full text of a memory by its id (from search), with its history and sources. Cite its url when you use it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesMemory id

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false. The description adds useful behavioral context: it returns full text, history, and sources, and instructs the agent to cite the URL. This goes beyond the annotations without contradicting them.

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 concise sentences, front-loaded with the core function and complemented by a usage instruction. There is no redundant or filler content.

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

Completeness5/5

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

For a simple single-parameter read tool, the description is complete: it names the return contents (full text, history, sources), gives the sourcing instruction, and annotations cover safety. No additional context seems necessary for correct invocation.

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 100%, with the single 'id' parameter already documented as 'Memory id'. The description only repeats that the id comes from search, adding 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?

The description states a specific verb ('Fetch'), a specific resource ('a memory by its id'), and clarifies the scope ('full text... with its history and sources'). It is clearly distinguished from the sibling 'search' by referencing results from search.

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 explicitly indicates this tool is used on memory ids obtained from search, giving clear operational context. It does not explicitly name alternatives or exclusions, but the workflow dependency is clear enough for an agent to select it appropriately.

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.

  1. 7 tool updatesv1.1.0
    • First observedcortex_conflicts
    • First observedcortex_forget
    • First observedcortex_recall
    • First observedcortex_write
    • First observedcortex_write_status
    • First observedfetch
    • First observedsearch

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation4/5

Most tools have distinct purposes: conflicts, forget, write, status, and fetch are clear. However, search, fetch, and recall all involve retrieving memory content and could overlap in practice, requiring careful description reading to pick the right one.

Naming Consistency2/5

Naming is inconsistent: some tools use the cortex_ prefix (cortex_conflicts, cortex_forget, cortex_recall, cortex_write, cortex_write_status) while others do not (search, fetch). The pattern is not uniform, and cortex_write_status breaks the simple verb_noun structure.

Tool Count5/5

Seven tools is a reasonable, focused set for a persistent memory server. Each tool covers a needed operation without feeling bloated or sparse.

Completeness4/5

The toolset covers the core memory lifecycle: write, read via search/fetch/recall, delete via forget, plus conflict and status handling. An explicit update or list-all operation is missing, but write can likely serve as upsert and search covers listing, so the surface is largely complete.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    This MCP server exposes Sekha memory tools (store, search, update, etc.) to any MCP-compatible client, enabling persistent conversation memory across Claude Desktop, Claude Code, and other applications.
    2
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    A local stdio MCP server that exposes a shared brain (read/search/write) over ~/.claude/memory, allowing memories written in any agent to be readable and searchable across all three (Claude Code, Cursor, Codex). It provides tools like memory_search, memory_read, memory_write, etc., with no external services.
    17
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Official Model Context Protocol (MCP) server for Cogniz Memory Platform. Enables AI assistants like Claude to store and retrieve memories across conversations.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    @memofs/mcp-server lets AI coding agents (Claude Code, Claude Desktop, Codex, Cursor, opencode, Gemini CLI, GitHub Copilot, Zed, and any other MCP client) securely read and write MemoFS memory through standard Model Context Protocol tools.
    6
    MIT