@proofofwork-agency/toolpin 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +117 -0
- package/LICENSE +183 -0
- package/README.md +323 -0
- package/SECURITY.md +61 -0
- package/action.yml +134 -0
- package/dist/canonicalJson.js +38 -0
- package/dist/capabilities.js +139 -0
- package/dist/ci.js +26 -0
- package/dist/cli.js +1843 -0
- package/dist/clientSupport.js +76 -0
- package/dist/codexToml.js +213 -0
- package/dist/config.js +337 -0
- package/dist/constants.js +3 -0
- package/dist/continueYaml.js +76 -0
- package/dist/doctor.js +163 -0
- package/dist/install.js +191 -0
- package/dist/installed.js +405 -0
- package/dist/integrity.js +14 -0
- package/dist/inventory.js +169 -0
- package/dist/packageIntegrity.js +153 -0
- package/dist/plan.js +595 -0
- package/dist/policy.js +310 -0
- package/dist/registry.js +1610 -0
- package/dist/runtimeAdvisory.js +80 -0
- package/dist/safeFetch.js +157 -0
- package/dist/sarif.js +162 -0
- package/dist/scan.js +113 -0
- package/dist/search.js +44 -0
- package/dist/secrets.js +165 -0
- package/dist/signing.js +146 -0
- package/dist/tester.js +240 -0
- package/dist/trust.js +528 -0
- package/dist/tui/app.js +1731 -0
- package/dist/tui/command.js +50 -0
- package/dist/tui/configSnippet.js +11 -0
- package/dist/tui/constants.js +37 -0
- package/dist/tui/format.js +31 -0
- package/dist/tui/installedState.js +23 -0
- package/dist/tui/layout.js +65 -0
- package/dist/tui/selectors.js +282 -0
- package/dist/tui/types.js +1 -0
- package/dist/tui/ui/trust.js +77 -0
- package/dist/tui/views/installed.js +82 -0
- package/dist/tui/views/panels.js +637 -0
- package/dist/tui.js +12 -0
- package/dist/types.js +1 -0
- package/dist/verificationTrust.js +103 -0
- package/dist/verify.js +537 -0
- package/dist/version.js +1 -0
- package/dist/versions.js +127 -0
- package/docs/assets/readme/terminal-demo.svg +174 -0
- package/docs/assets/readme/tui-browse-overview.jpg +0 -0
- package/docs/assets/readme/tui-config-preview.jpg +0 -0
- package/docs/assets/readme/tui-help.jpg +0 -0
- package/docs/assets/readme/tui-installed-inventory.jpg +0 -0
- package/docs/how-to/catch-drift-in-ci.md +189 -0
- package/docs/how-to/custom-registries.md +156 -0
- package/docs/how-to/toolpin-curated-registry.md +153 -0
- package/package.json +76 -0
- package/registry/README.md +92 -0
- package/registry/v0/servers +115 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# ToolPin Curated Registry
|
|
2
|
+
|
|
3
|
+
ToolPin hosts a first-party curated registry without running any custom
|
|
4
|
+
infrastructure. The registry is versioned JSON in this repository, fetched from
|
|
5
|
+
raw GitHub at runtime, and bundled in the npm package as an offline fallback
|
|
6
|
+
snapshot.
|
|
7
|
+
|
|
8
|
+
Use it for servers ToolPin maintainers are willing to recommend because the
|
|
9
|
+
metadata is installable, reviewable, lockable, and documented. Do not use it as
|
|
10
|
+
a broad directory.
|
|
11
|
+
|
|
12
|
+
## URLs
|
|
13
|
+
|
|
14
|
+
Raw GitHub source of truth, no site deploy required:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
https://raw.githubusercontent.com/proofofwork-agency/toolpin/main/registry/v0/servers
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
GitHub Pages / Docusaurus static mirror:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
https://proofofwork-agency.github.io/toolpin/registry/v0/servers
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
For custom `official-compatible` registries, ToolPin appends `/servers`
|
|
27
|
+
automatically when configured with a base URL.
|
|
28
|
+
|
|
29
|
+
## Built-In Source
|
|
30
|
+
|
|
31
|
+
ToolPin ships this registry as the built-in `toolpin` source: a GitHub-backed
|
|
32
|
+
curated registry with bundled fallback. It is first in the source list, enabled
|
|
33
|
+
by default, and pinned. Users can filter to another source, but `toolpin` cannot be
|
|
34
|
+
disabled through `.toolpin/registries.json`, `toolpin registry disable`, or the
|
|
35
|
+
TUI source selector.
|
|
36
|
+
|
|
37
|
+
Then:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
toolpin registry list
|
|
41
|
+
toolpin ingest --source toolpin
|
|
42
|
+
toolpin search github --source toolpin
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Add a Server by PR
|
|
46
|
+
|
|
47
|
+
Edit both files:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
registry/v0/servers
|
|
51
|
+
website/static/registry/v0/servers
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
They must stay identical. CI runs:
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
npm run registry:check
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Each entry must be installable and include curation metadata:
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"server": {
|
|
65
|
+
"name": "io.github.example/server",
|
|
66
|
+
"title": "Example MCP Server",
|
|
67
|
+
"description": "What this server does and why it is useful.",
|
|
68
|
+
"version": "1.0.0",
|
|
69
|
+
"repository": {
|
|
70
|
+
"url": "https://github.com/example/server",
|
|
71
|
+
"source": "github"
|
|
72
|
+
},
|
|
73
|
+
"packages": [
|
|
74
|
+
{
|
|
75
|
+
"registryType": "npm",
|
|
76
|
+
"identifier": "@example/server",
|
|
77
|
+
"version": "1.0.0",
|
|
78
|
+
"transport": {
|
|
79
|
+
"type": "stdio"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
"_meta": {
|
|
85
|
+
"dev.toolpin/curation": {
|
|
86
|
+
"status": "reviewed",
|
|
87
|
+
"reviewedAt": "2026-06-25",
|
|
88
|
+
"reviewedBy": "toolpin-maintainers",
|
|
89
|
+
"reason": "Why ToolPin recommends this server.",
|
|
90
|
+
"evidenceTier": "metadata-only",
|
|
91
|
+
"riskNotes": [],
|
|
92
|
+
"testedClients": ["claude"],
|
|
93
|
+
"toolpinEnforcement": {
|
|
94
|
+
"status": "not-verified",
|
|
95
|
+
"notes": "Branch protection and ToolPin CI enforcement have not been verified."
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"dev.toolpin/clientSupport": {
|
|
99
|
+
"default": "unsupported",
|
|
100
|
+
"clients": {
|
|
101
|
+
"codex": {
|
|
102
|
+
"status": "toolpin-installable",
|
|
103
|
+
"installMode": "mcp-config",
|
|
104
|
+
"requirements": ["node>=22"],
|
|
105
|
+
"setupCommands": [],
|
|
106
|
+
"notes": "ToolPin can write this as a normal Codex MCP server."
|
|
107
|
+
},
|
|
108
|
+
"claude": {
|
|
109
|
+
"status": "toolpin-installable",
|
|
110
|
+
"installMode": "mcp-config",
|
|
111
|
+
"requirements": ["node>=22"],
|
|
112
|
+
"setupCommands": [],
|
|
113
|
+
"notes": "ToolPin can write this as a project MCP server."
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The container file (`registry/v0/servers`) wraps entries in a `servers` array plus a `metadata` block. If `metadata.count` or `metadata.total` is present, it must equal `servers.length`, or `npm run registry:check` fails. Package targets require `registryType`, `identifier`, and `transport.type`; remote targets require an `https://` URL.
|
|
122
|
+
|
|
123
|
+
`dev.toolpin/clientSupport` is ToolPin-owned metadata:
|
|
124
|
+
|
|
125
|
+
- `toolpin-installable`: ToolPin can generate the client MCP config directly.
|
|
126
|
+
- `external-setup`: the client is supported, but setup needs documented steps
|
|
127
|
+
outside ToolPin, such as plugins, daemons, project initialization, or
|
|
128
|
+
instruction-file writes.
|
|
129
|
+
- `unsupported`: ToolPin must not offer that client as an install target.
|
|
130
|
+
|
|
131
|
+
Use `requirements` for runtimes, CLIs, API-key prerequisites, OAuth support, or
|
|
132
|
+
other normal setup constraints. Use `setupCommands` only for documented external
|
|
133
|
+
steps; ToolPin does not run external setup commands from registry metadata.
|
|
134
|
+
|
|
135
|
+
For ContextRelay specifically, Codex is `toolpin-installable` through a normal
|
|
136
|
+
MCP config that runs package arguments equivalent to `contextrelay codex-mcp
|
|
137
|
+
server`. Claude is `external-setup`: install ContextRelay globally, run
|
|
138
|
+
`ctxrelay init --instructions project`, and use the generated Claude
|
|
139
|
+
plugin/setup. ToolPin must not run `ctxrelay init` until an explicit external
|
|
140
|
+
setup flow exists because it writes project files and plugin state.
|
|
141
|
+
|
|
142
|
+
Reviewers should reject entries that are hosted-only, source-missing,
|
|
143
|
+
non-installable, stale, duplicate, or not useful enough to recommend. Use
|
|
144
|
+
`evidenceTier` and `toolpinEnforcement.status` honestly: `metadata-only` and
|
|
145
|
+
`not-verified` are valid for seed entries; reserve stronger labels for checks
|
|
146
|
+
ToolPin can actually verify.
|
|
147
|
+
|
|
148
|
+
Local validation:
|
|
149
|
+
|
|
150
|
+
```sh
|
|
151
|
+
npm run registry:check
|
|
152
|
+
npm test
|
|
153
|
+
```
|
package/package.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@proofofwork-agency/toolpin",
|
|
3
|
+
"version": "0.2.3",
|
|
4
|
+
"description": "Trusted install, lockfile, and governance layer for MCP servers",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"mcp",
|
|
8
|
+
"model-context-protocol",
|
|
9
|
+
"lockfile",
|
|
10
|
+
"supply-chain",
|
|
11
|
+
"cli",
|
|
12
|
+
"github-action"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://proofofwork-agency.github.io/toolpin/",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/proofofwork-agency/toolpin/issues"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/proofofwork-agency/toolpin.git"
|
|
21
|
+
},
|
|
22
|
+
"type": "module",
|
|
23
|
+
"packageManager": "npm@10.9.2",
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md",
|
|
27
|
+
"LICENSE",
|
|
28
|
+
"SECURITY.md",
|
|
29
|
+
"CONTRIBUTING.md",
|
|
30
|
+
"action.yml",
|
|
31
|
+
"registry",
|
|
32
|
+
"docs/assets/readme",
|
|
33
|
+
"docs/how-to/catch-drift-in-ci.md",
|
|
34
|
+
"docs/how-to/custom-registries.md",
|
|
35
|
+
"docs/how-to/toolpin-curated-registry.md"
|
|
36
|
+
],
|
|
37
|
+
"bin": {
|
|
38
|
+
"toolpin": "./dist/cli.js",
|
|
39
|
+
"tpn": "./dist/cli.js"
|
|
40
|
+
},
|
|
41
|
+
"scripts": {
|
|
42
|
+
"build": "tsc -p tsconfig.json",
|
|
43
|
+
"postbuild": "node -e \"require('fs').chmodSync('dist/cli.js', 0o755)\"",
|
|
44
|
+
"docs:build": "docusaurus build website",
|
|
45
|
+
"docs:clear": "docusaurus clear website",
|
|
46
|
+
"docs:start": "docusaurus start website",
|
|
47
|
+
"registry:check": "node scripts/check-curated-registry.mjs",
|
|
48
|
+
"test": "npm run build && node --test",
|
|
49
|
+
"docs:check": "node scripts/check-doc-consistency.mjs",
|
|
50
|
+
"self:ci": "node dist/cli.js ci --file mcp-lock.json --source toolpin --live --verify --skip-live-verification --timeout 15000",
|
|
51
|
+
"audit:runtime": "npm audit --omit=dev",
|
|
52
|
+
"release:check": "npm test && npm run self:ci && npm run docs:check && npm run docs:build && npm run registry:check && npm run audit:runtime && node scripts/check-publish-target.mjs && npm pack --dry-run",
|
|
53
|
+
"prepare": "npm run build",
|
|
54
|
+
"prepublishOnly": "npm run release:check",
|
|
55
|
+
"start": "node dist/cli.js",
|
|
56
|
+
"dev": "npm run build && node dist/cli.js",
|
|
57
|
+
"tui": "npm run build && node dist/cli.js tui",
|
|
58
|
+
"smoke": "npm run build && node dist/cli.js search github --limit 3 --live"
|
|
59
|
+
},
|
|
60
|
+
"engines": {
|
|
61
|
+
"node": ">=22"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@docusaurus/core": "^3.10.1",
|
|
65
|
+
"@docusaurus/preset-classic": "^3.10.1",
|
|
66
|
+
"@types/node": "^22.10.7",
|
|
67
|
+
"@types/react": "^19.2.17",
|
|
68
|
+
"typescript": "^5.7.3"
|
|
69
|
+
},
|
|
70
|
+
"dependencies": {
|
|
71
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
72
|
+
"ink": "^7.1.0",
|
|
73
|
+
"react": "^19.2.7",
|
|
74
|
+
"yaml": "^2.9.0"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# ToolPin Curated Registry
|
|
2
|
+
|
|
3
|
+
This directory is the source of the ToolPin Curated MCP Registry.
|
|
4
|
+
|
|
5
|
+
It is intentionally GitHub-native:
|
|
6
|
+
|
|
7
|
+
- entries are reviewed through pull requests;
|
|
8
|
+
- CI validates the registry shape before merge;
|
|
9
|
+
- no database or hosted backend is required;
|
|
10
|
+
- raw GitHub is the runtime source of truth, with GitHub Pages only as a static mirror.
|
|
11
|
+
|
|
12
|
+
## Endpoints
|
|
13
|
+
|
|
14
|
+
Canonical source file:
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
registry/v0/servers
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Raw GitHub URL after merge to `main`:
|
|
21
|
+
|
|
22
|
+
```text
|
|
23
|
+
https://raw.githubusercontent.com/proofofwork-agency/toolpin/main/registry/v0/servers
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
GitHub Pages / Docusaurus mirror after the website is deployed:
|
|
27
|
+
|
|
28
|
+
```text
|
|
29
|
+
https://proofofwork-agency.github.io/toolpin/registry/v0/servers
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
For custom official-compatible registries, ToolPin appends `/servers`, so
|
|
33
|
+
configure the registry base URL without the trailing `/servers`.
|
|
34
|
+
|
|
35
|
+
## Built-In CLI Source
|
|
36
|
+
|
|
37
|
+
Current ToolPin versions expose this registry as the built-in `toolpin` source.
|
|
38
|
+
The CLI fetches the raw GitHub `/servers` file first and uses the packaged
|
|
39
|
+
`registry/v0/servers` file only as an offline fallback snapshot.
|
|
40
|
+
|
|
41
|
+
Then run:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
toolpin registry list
|
|
45
|
+
toolpin ingest --source toolpin
|
|
46
|
+
toolpin search github --source toolpin
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Adding Servers
|
|
50
|
+
|
|
51
|
+
Add entries to `registry/v0/servers` and mirror the same content to
|
|
52
|
+
`website/static/registry/v0/servers`. Run:
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
npm run registry:check
|
|
56
|
+
npm test
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Every server entry must be installable: it needs a package or remote target,
|
|
60
|
+
version/source metadata, transport, repository URL when available, declared
|
|
61
|
+
secrets, and ToolPin curation metadata.
|
|
62
|
+
|
|
63
|
+
Required curation metadata:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"_meta": {
|
|
68
|
+
"dev.toolpin/curation": {
|
|
69
|
+
"status": "reviewed",
|
|
70
|
+
"reviewedAt": "2026-06-25",
|
|
71
|
+
"reviewedBy": "toolpin-maintainers",
|
|
72
|
+
"reason": "Why this server belongs in the curated registry.",
|
|
73
|
+
"evidenceTier": "metadata-only",
|
|
74
|
+
"riskNotes": [],
|
|
75
|
+
"testedClients": ["claude"],
|
|
76
|
+
"toolpinEnforcement": {
|
|
77
|
+
"status": "not-verified",
|
|
78
|
+
"notes": "Branch protection and ToolPin CI enforcement have not been verified."
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Do not add hosted-only, source-missing, stale, duplicate, non-installable, or
|
|
86
|
+
unreviewed entries to this registry. `evidenceTier` must be honest:
|
|
87
|
+
`metadata-only` for reviewed metadata, `digest-pinned` for immutable pins,
|
|
88
|
+
`byte-verified` only when ToolPin recomputed or resolved artifact bytes, and
|
|
89
|
+
`provenance-attested` only when provenance verification is implemented. Use
|
|
90
|
+
`toolpinEnforcement.status: "enforced"` only when the ToolPin check is required
|
|
91
|
+
by branch protection or rulesets and can be validated; otherwise use
|
|
92
|
+
`not-verified` with notes. Use discovery registries for broad search.
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"servers": [
|
|
3
|
+
{
|
|
4
|
+
"server": {
|
|
5
|
+
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
|
|
6
|
+
"name": "@proofofwork-agency/contextrelay",
|
|
7
|
+
"title": "ContextRelay",
|
|
8
|
+
"description": "Local coordination bridge that connects Codex and Claude Code agents in the same project session.",
|
|
9
|
+
"repository": {
|
|
10
|
+
"url": "https://github.com/proofofwork-agency/contextrelay",
|
|
11
|
+
"source": "github"
|
|
12
|
+
},
|
|
13
|
+
"version": "3.9.2",
|
|
14
|
+
"packages": [
|
|
15
|
+
{
|
|
16
|
+
"registryType": "npm",
|
|
17
|
+
"identifier": "@proofofwork-agency/contextrelay",
|
|
18
|
+
"version": "3.9.2",
|
|
19
|
+
"runtimeHint": "bun",
|
|
20
|
+
"packageArguments": [
|
|
21
|
+
"codex-mcp",
|
|
22
|
+
"server"
|
|
23
|
+
],
|
|
24
|
+
"transport": {
|
|
25
|
+
"type": "stdio"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"_meta": {
|
|
31
|
+
"dev.toolpin/curation": {
|
|
32
|
+
"status": "reviewed",
|
|
33
|
+
"reviewedAt": "2026-06-27T00:00:00.000Z",
|
|
34
|
+
"reviewedBy": "toolpin-maintainers",
|
|
35
|
+
"reason": "First-party ContextRelay bridge for agent collaboration; Codex consumes it as a stdio MCP server, not as a Codex plugin. Claude support requires project/plugin initialization.",
|
|
36
|
+
"evidenceTier": "byte-verified",
|
|
37
|
+
"riskNotes": [
|
|
38
|
+
"Requires Bun to run the npm package through bunx.",
|
|
39
|
+
"Upstream ContextRelay documents `ctxrelay codex-mcp install` as the canonical global Codex registration; ToolPin direct install writes the equivalent stdio MCP launch command into Codex config.",
|
|
40
|
+
"Claude setup writes project/plugin state and is documented as external setup until ToolPin has an explicit setup flow."
|
|
41
|
+
],
|
|
42
|
+
"testedClients": [
|
|
43
|
+
"codex",
|
|
44
|
+
"claude"
|
|
45
|
+
],
|
|
46
|
+
"toolpinEnforcement": {
|
|
47
|
+
"status": "not-verified",
|
|
48
|
+
"notes": "Repository branch protection and ToolPin CI enforcement have not been verified for this entry."
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
"dev.toolpin/evidence": [
|
|
52
|
+
{
|
|
53
|
+
"code": "npm_integrity_verified",
|
|
54
|
+
"status": "passed",
|
|
55
|
+
"message": "npm tarball integrity matched registry dist.integrity for @proofofwork-agency/contextrelay@3.9.2.",
|
|
56
|
+
"source": "npm-tarball",
|
|
57
|
+
"claim": "sha512-zUmS+iLWX/uRha5wzO8AdxSHUrOvXy8MOx+JHdMBRDRvMU+wS6jtQn0beWRUjRdMKN2RDZ0WRzxoHlDtEBmQYQ==",
|
|
58
|
+
"verificationMethod": "npm-packument-sri",
|
|
59
|
+
"verifiedByToolPin": true,
|
|
60
|
+
"trustedAnchor": true,
|
|
61
|
+
"trustAnchor": "registry.npmjs.org",
|
|
62
|
+
"verifiedAt": "2026-06-27T19:50:00.000Z"
|
|
63
|
+
}
|
|
64
|
+
],
|
|
65
|
+
"dev.toolpin/clientSupport": {
|
|
66
|
+
"default": "unsupported",
|
|
67
|
+
"clients": {
|
|
68
|
+
"codex": {
|
|
69
|
+
"status": "toolpin-installable",
|
|
70
|
+
"installMode": "mcp-config",
|
|
71
|
+
"requirements": [
|
|
72
|
+
"bun>=1.0.0"
|
|
73
|
+
],
|
|
74
|
+
"setupCommands": [
|
|
75
|
+
"ctxrelay codex-mcp install"
|
|
76
|
+
],
|
|
77
|
+
"notes": "ToolPin direct install writes a Codex stdio MCP config for the same server that `ctxrelay codex-mcp install` registers globally. ContextRelay does not currently ship a Codex plugin manifest."
|
|
78
|
+
},
|
|
79
|
+
"claude": {
|
|
80
|
+
"status": "external-setup",
|
|
81
|
+
"installMode": "claude-plugin",
|
|
82
|
+
"requirements": [
|
|
83
|
+
"bun>=1.0.0",
|
|
84
|
+
"claude-code"
|
|
85
|
+
],
|
|
86
|
+
"setupCommands": [
|
|
87
|
+
"npm install -g @proofofwork-agency/contextrelay",
|
|
88
|
+
"ctxrelay init --instructions project"
|
|
89
|
+
],
|
|
90
|
+
"notes": "Claude support exists through the ContextRelay Claude plugin/init flow, not a plain mcpServers entry."
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
"metadata": {
|
|
98
|
+
"count": 1,
|
|
99
|
+
"total": 1,
|
|
100
|
+
"name": "ToolPin Curated MCP Registry",
|
|
101
|
+
"description": "A PR-reviewed, GitHub-hosted registry for MCP servers ToolPin can normalize, review, lock, and recommend.",
|
|
102
|
+
"generatedAt": "2026-06-27T00:00:00.000Z",
|
|
103
|
+
"source": {
|
|
104
|
+
"type": "github",
|
|
105
|
+
"repository": "https://github.com/proofofwork-agency/toolpin",
|
|
106
|
+
"path": "registry/v0/servers"
|
|
107
|
+
},
|
|
108
|
+
"policy": {
|
|
109
|
+
"installableOnly": true,
|
|
110
|
+
"reviewRequired": true,
|
|
111
|
+
"prBasedUpdates": true,
|
|
112
|
+
"toolpinCiRequired": true
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|