Skip to content

Commit 38a5054

Browse files
feat(building-with-zep): add Cursor as a third plugin ecosystem (#581)
* feat(building-with-zep): add Cursor as a third plugin ecosystem Adds a Cursor manifest (.cursor-plugin/plugin.json) and a repo-root Cursor marketplace (.cursor-plugin/marketplace.json) alongside the existing Claude and Codex manifests, so all three runtimes load the same single copy of the skills/building-with-zep tree with no per-ecosystem duplication. Cursor is the one exception to sharing .mcp.json: Cursor auto-discovers mcp.json without the leading dot, and its remote-server schema has no `type` key. Rather than rely on Cursor tolerating "type": "http", the Cursor manifest declares the zep-docs server inline with a bare url. Co-Authored-By: Claude <noreply@anthropic.com> * fix(building-with-zep): move Cursor MCP config to plugin-root mcp.json Cursor's schema permits declaring mcpServers inline in plugin.json, but no official Cursor plugin does it -- every plugin that ships an MCP server uses a plugin-root mcp.json, and cursor/plugins@a65002e moved the Figma plugin onto that convention. Follow the pattern with a working precedent rather than the one that is merely permitted. Adds plugins/building-with-zep/mcp.json with a bare url (no `type` key, which Cursor documents for stdio servers only) and drops the inline mcpServers field from .cursor-plugin/plugin.json, letting Cursor auto-discover the file. .mcp.json is unchanged and still serves Claude Code and Codex with its `type: "http"` entry. The README now documents both files, why the duplication is deliberate, and that the two endpoints must be kept in sync -- resolving the earlier claim that zep-docs was "declared once in .mcp.json". Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent 0436eb3 commit 38a5054

4 files changed

Lines changed: 75 additions & 6 deletions

File tree

.cursor-plugin/marketplace.json

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "zep",
3+
"owner": {
4+
"name": "Zep"
5+
},
6+
"metadata": {
7+
"description": "Cursor plugins for building with Zep."
8+
},
9+
"plugins": [
10+
{
11+
"name": "building-with-zep",
12+
"source": "plugins/building-with-zep",
13+
"description": "Skill plus the Zep documentation MCP server for building apps on Zep."
14+
}
15+
]
16+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"name": "building-with-zep",
3+
"version": "0.1.0",
4+
"description": "Build and configure applications that use Zep — agent memory built on temporal Context Graphs. Bundles the building-with-zep skill (how to reason about and build on Zep) and the Zep documentation MCP server (real-time docs search).",
5+
"author": {
6+
"name": "Zep"
7+
},
8+
"homepage": "https://help.getzep.com",
9+
"repository": "https://github.com/getzep/zep",
10+
"keywords": ["zep", "agent-memory", "context-graph", "mcp"],
11+
"category": "development",
12+
"skills": "./skills/"
13+
}

plugins/building-with-zep/README.md

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,34 @@
11
# building-with-zep
22

3-
A plugin for building applications that use [Zep](https://www.getzep.com) — agent memory built on temporal Context Graphs. This one directory is **both** a Claude Code plugin and an OpenAI Codex plugin, wrapping a single shared skill.
3+
A plugin for building applications that use [Zep](https://www.getzep.com) — agent memory built on temporal Context Graphs. This one directory is simultaneously a Claude Code plugin, an OpenAI Codex plugin, and a Cursor plugin, wrapping a single shared skill.
44

55
It bundles two things:
66

77
- **The `building-with-zep` skill** (`skills/building-with-zep/`) — the decision-and-workflow layer for building on Zep: scoping graphs, ingesting data, retrieving context, and evaluating whether Zep delivers your use case. It indexes the Zep docs rather than duplicating them. Model-invoked when you work on Zep integration code.
8-
- **The Zep documentation MCP server** (`zep-docs`) — real-time search over Zep's docs at `https://docs-mcp.getzep.com/mcp` (remote HTTP, no API key), declared once in `.mcp.json`.
8+
- **The Zep documentation MCP server** (`zep-docs`) — real-time search over Zep's docs at `https://docs-mcp.getzep.com/mcp` (remote HTTP, no API key). Claude Code and Codex read it from `.mcp.json`; Cursor reads it from `mcp.json`. See [MCP config](#mcp-config-two-files-one-server) for why there are two.
99

10-
## One directory, two ecosystems
10+
## One directory, three ecosystems
1111

12-
Both runtimes load the **same** `skills/building-with-zep/` tree and the **same** `.mcp.json`; each reads only its own manifest and ignores the other's. There is exactly one physical copy of the skill no per-ecosystem duplication and no sync step.
12+
All three runtimes load the **same** `skills/building-with-zep/` tree; each reads only its own manifest and ignores the others'. There is exactly one physical copy of the skill, so no per-ecosystem duplication and no sync step for the substance of this plugin. The MCP server config is the one thing that exists twice, for the reason below.
1313

1414
- **Claude Code** — manifest `.claude-plugin/plugin.json`; auto-discovers `skills/` and `.mcp.json`. Listed in the marketplace at the repo root (`.claude-plugin/marketplace.json`).
1515
- **Codex** — manifest `.codex-plugin/plugin.json` (points at `./skills/` and `./.mcp.json`). Listed in the Codex marketplace at `.agents/plugins/marketplace.json`.
16+
- **Cursor** — manifest `.cursor-plugin/plugin.json` (points at `./skills/`); auto-discovers `mcp.json`. Listed in the Cursor marketplace at `.cursor-plugin/marketplace.json`.
17+
18+
### MCP config: two files, one server
19+
20+
`zep-docs` is declared twice, and the duplication is deliberate:
21+
22+
| File | Read by | Shape |
23+
|---|---|---|
24+
| `.mcp.json` | Claude Code, Codex | `{"type":"http","url":...}` |
25+
| `mcp.json` | Cursor | `{"url":...}`, no `type` |
26+
27+
Cursor discovers `mcp.json` at the plugin root, without the leading dot, and its remote-server schema has no `type` key (`type` is documented for stdio servers only). A single shared file would therefore have to rely on Cursor tolerating `"type": "http"`, which is undocumented.
28+
29+
Declaring the server inline under `mcpServers` in `.cursor-plugin/plugin.json` is permitted by Cursor's schema, but no official Cursor plugin does it — every one that ships an MCP server uses a plugin-root `mcp.json`, and [`cursor/plugins@a65002e`](https://github.com/cursor/plugins/commit/a65002e3) moved the Figma plugin onto that convention. This plugin follows it.
30+
31+
**Both files point at `https://docs-mcp.getzep.com/mcp`. Change one and you must change the other.**
1632

1733
## Install
1834

@@ -27,13 +43,29 @@ Local dev: `claude --plugin-dir plugins/building-with-zep`.
2743

2844
**Codex** — install per the [Codex plugins docs](https://learn.chatgpt.com/docs/build-plugins) via the marketplace at `.agents/plugins/marketplace.json`.
2945

46+
**Cursor** — requires Cursor 2.5 or later. In an Agent chat, type the full command; it does not appear in autocomplete:
47+
48+
```
49+
/add-plugin building-with-zep@https://github.com/getzep/zep
50+
```
51+
52+
This resolves `building-with-zep` through `.cursor-plugin/marketplace.json` at the repo root, and installs the skill and the `zep-docs` server (from `mcp.json`) together. No Cursor Marketplace listing is involved.
53+
54+
Local dev: symlink the plugin directory into Cursor's local plugin folder, then run **Developer: Reload Window**.
55+
56+
```bash
57+
ln -s "$PWD/plugins/building-with-zep" ~/.cursor/plugins/local/building-with-zep
58+
```
59+
3060
## Contents
3161

3262
```
3363
plugins/building-with-zep/
3464
├── .claude-plugin/plugin.json # Claude manifest
3565
├── .codex-plugin/plugin.json # Codex manifest (skills:"./skills/", mcpServers:"./.mcp.json")
36-
├── .mcp.json # zep-docs remote HTTP MCP (shared by both)
66+
├── .cursor-plugin/plugin.json # Cursor manifest (skills:"./skills/")
67+
├── .mcp.json # zep-docs, with type:"http" (Claude + Codex)
68+
├── mcp.json # zep-docs, bare url (Cursor, auto-discovered)
3769
├── skills/
3870
│ └── building-with-zep/
3971
│ ├── SKILL.md # the one shared skill
@@ -45,7 +77,8 @@ plugins/building-with-zep/
4577
> `type`; Codex uses the `url` and should ignore the `type` key. Verify the
4678
> `zep-docs` server loads under your installed Codex CLI; if Codex rejects
4779
> `type`, move Claude's MCP inline into `.claude-plugin/plugin.json` and keep
48-
> `.mcp.json` as a bare-`url` Codex-only file.
80+
> `.mcp.json` as a bare-`url` Codex-only file. Cursor reads `mcp.json` instead
81+
> and is unaffected either way.
4982
5083
## What goes in the skill vs. the docs
5184

plugins/building-with-zep/mcp.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"mcpServers": {
3+
"zep-docs": {
4+
"url": "https://docs-mcp.getzep.com/mcp"
5+
}
6+
}
7+
}

0 commit comments

Comments
 (0)