chore: genericize plugin manifests for public release #10

Merged
jknapp merged 1 commits from chore/genericize-plugin into main 2026-07-27 04:41:22 +00:00
4 changed files with 60 additions and 14 deletions
Showing only changes of commit 8dff061faf - Show all commits
+5 -5
View File
@@ -1,16 +1,16 @@
{ {
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json", "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "dnspegasus", "name": "cybercove-labs",
"description": "Self-hosted Claude Code plugins for the dnspegasus.net infrastructure.", "description": "Open-source Claude Code plugins released by CyberCove Labs.",
"owner": { "owner": {
"name": "jknapp", "name": "CyberCove Labs",
"url": "https://repo.anhonesthost.net/jknapp/shared-memory" "url": "https://repo.anhonesthost.net/cybercove-labs/shared-memory"
}, },
"plugins": [ "plugins": [
{ {
"name": "shared-memory", "name": "shared-memory",
"source": "./plugin", "source": "./plugin",
"description": "Shared persistent memory and snippet library for Claude Code sessions, backed by memory.dnspegasus.net and authenticated with Authentik OIDC." "description": "Shared persistent memory and snippet library for Claude Code sessions, backed by your own shared-memory server and authenticated with OIDC."
} }
] ]
} }
+50 -4
View File
@@ -322,9 +322,55 @@ prompt, never reaching the app.
## Connecting Claude Code ## Connecting Claude Code
Two paths, in order of preference: Three paths, in order of preference:
### A. OAuth flow (recommended — picks up your IdP credentials) ### A. Plugin (recommended — one command, no flags to remember)
This repo doubles as a Claude Code plugin marketplace. `plugin/.mcp.json` ships a
**pre-registered** OAuth client, so Claude Code never needs RFC 7591 Dynamic Client
Registration — which matters because most self-hosted IdPs (Authentik included, as of
2026.5) don't implement it.
`main` carries placeholders, so install from `main` only after pointing it at your own
instance. Fork or clone, then edit `plugin/.mcp.json`:
```json
{
"mcpServers": {
"shared-memory": {
"type": "http",
"url": "https://memory.example.com/api/mcp",
"oauth": {
"clientId": "<OIDC_CLIENT_ID_MCP>",
"callbackPort": 33418
}
}
}
}
```
`clientId` is the **Public** (PKCE) client from step B above — it is not a secret and is
meant to be committed. `callbackPort` must match a redirect URI your IdP accepts; with
the loopback regex from the setup step, any port works.
Then:
```bash
claude plugin marketplace add https://your-git-host/you/shared-memory.git
claude plugin install shared-memory@cybercove-labs
```
To keep a filled-in copy on a branch instead of forking, commit it to e.g.
`instance/<name>` and install with a `#ref` fragment:
```bash
claude plugin marketplace add https://your-git-host/you/shared-memory.git#instance/<name>
```
The `#ref` suffix is undocumented in `claude plugin marketplace add --help` but is
honored and persisted in `known_marketplaces.json` (verified on Claude Code 2.1.220).
### B. OAuth flow (manual, per-machine)
```bash ```bash
claude mcp add --transport http --scope user \ claude mcp add --transport http --scope user \
@@ -350,7 +396,7 @@ your MCP client's **Redirect URIs** list. Authentik users with the regex
pattern from the setup step (`^http://(127\.0\.0\.1|localhost):\d+/.*$`) pattern from the setup step (`^http://(127\.0\.0\.1|localhost):\d+/.*$`)
can use any port without re-registering. can use any port without re-registering.
### B. Manual-paste fallback (when loopback isn't reachable) ### C. Manual-paste fallback (when loopback isn't reachable)
Sealed containers, devboxes without port forwarding, etc. The redirect URI Sealed containers, devboxes without port forwarding, etc. The redirect URI
in this case is hosted by *this* server: in this case is hosted by *this* server:
@@ -372,7 +418,7 @@ Claude Code's prompt to complete the flow.
The manual-fallback URI must be registered on your MCP client too: The manual-fallback URI must be registered on your MCP client too:
`https://memory.example.com/auth/cli-callback`. `https://memory.example.com/auth/cli-callback`.
### C. Static bearer token (no browser at all) ### D. Static bearer token (no browser at all)
For fully headless / CI scenarios, mint a long-lived HMAC token at For fully headless / CI scenarios, mint a long-lived HMAC token at
`https://memory.example.com/connect` and pass it via `--header`. See `https://memory.example.com/connect` and pass it via `--header`. See
+3 -3
View File
@@ -2,9 +2,9 @@
"$schema": "https://anthropic.com/claude-code/plugin.schema.json", "$schema": "https://anthropic.com/claude-code/plugin.schema.json",
"name": "shared-memory", "name": "shared-memory",
"version": "0.1.0", "version": "0.1.0",
"description": "Shared persistent memory and snippet library for Claude Code sessions, backed by memory.dnspegasus.net and authenticated with Authentik OIDC.", "description": "Shared persistent memory and snippet library for Claude Code sessions, backed by your own shared-memory server and authenticated with OIDC.",
"author": { "author": {
"name": "jknapp" "name": "CyberCove Labs"
}, },
"homepage": "https://memory.dnspegasus.net" "homepage": "https://repo.anhonesthost.net/cybercove-labs/shared-memory"
} }
+2 -2
View File
@@ -2,9 +2,9 @@
"mcpServers": { "mcpServers": {
"shared-memory": { "shared-memory": {
"type": "http", "type": "http",
"url": "https://memory.dnspegasus.net/api/mcp", "url": "https://memory.example.com/api/mcp",
"oauth": { "oauth": {
"clientId": "5rkRS3rJhn3Ci9swWkxYMIrZ9OggsjOGy3cIOhYY", "clientId": "<OIDC_CLIENT_ID_MCP>",
"callbackPort": 33418 "callbackPort": 33418
} }
} }