@probo/skills 0.2.2 → 0.3.0

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "probo",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Open-source compliance workflows powered by Probo MCP (Claude Code, Codex, OpenCode)",
5
5
  "author": {
6
6
  "name": "Probo Inc",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "probo",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Open-source compliance workflows powered by Probo MCP (Codex, OpenCode, Claude Code)",
5
5
  "author": {
6
6
  "name": "Probo Inc",
package/.mcp.json CHANGED
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "mcpServers": {
3
- "probo": {
3
+ "probo-us": {
4
4
  "type": "http",
5
- "url": "${PROBO_BASE_URL}/mcp/v1"
5
+ "url": "https://us.probo.com/api/mcp/v1"
6
+ },
7
+ "probo-eu": {
8
+ "type": "http",
9
+ "url": "https://eu.probo.com/api/mcp/v1"
6
10
  }
7
11
  }
8
12
  }
package/COMPATIBILITY.md CHANGED
@@ -22,31 +22,69 @@ SOFTWARE.
22
22
 
23
23
  # Multi-agent compatibility
24
24
 
25
- `@probo/skills` targets **Claude Code**, **Codex**, **OpenCode**, and
26
- other MCP-capable agents (including **Cursor**). The portable core is Probo
27
- MCP plus Agent Skills–compatible `SKILL.md` files.
25
+ `@probo/skills` is an [Agent Plugins 1.0.0](https://agent-plugins.org/)
26
+ package. The portable core is `plugin.json`, Agent Skills under `skills/`, and
27
+ Probo MCP servers in `mcp.json`. Client-specific manifests carry the same
28
+ components to **Claude Code**, **Codex**, **OpenCode**, and **Cursor** until
29
+ those clients load the portable package directly.
28
30
 
29
- ## What works where
31
+ ## Portable package (Agent Plugins 1.0.0)
32
+
33
+ ```
34
+ plugin.json # $schema + plugin identity (spec §5)
35
+ skills/ # one directory per skill, each with SKILL.md (spec §7.1)
36
+ mcp.json # $schema + mcpServers (spec §7.2)
37
+ ```
38
+
39
+ Both documents declare
40
+ `https://agent-plugins.org/schemas/1.0.0/{plugin,mcp}.schema.json`, and the
41
+ spec requires the two versions to match.
42
+
43
+ Commands, marketplace catalogs, and the client manifests are outside the v1
44
+ format — Agent Plugins v1 standardizes only skills and MCP servers. Clients
45
+ ignore the extra files.
30
46
 
31
- | Component | Claude Code | Codex | OpenCode | Cursor |
32
- | --- | --- | --- | --- | --- |
33
- | Probo MCP (OAuth) | ✅ Plugin `.mcp.json` | ✅ `.codex-plugin` + `.mcp.json` | ✅ Manual MCP config | ✅ IDE MCP settings |
34
- | Skills (`SKILL.md`) | ✅ `skills/` | ✅ `skills/` via `.codex-plugin` | ✅ `.opencode/skills/` or `.claude/skills/` | ✅ Copy/symlink to `.cursor/skills/` |
35
- | Commands | ✅ `commands/` → `/probo:…` | ⚠️ Use skills instead | ⚠️ Native `skill` tool | ❌ Use skill or rules |
36
- | Plugin manifest | `.claude-plugin/` | `.codex-plugin/` | Discovery paths (no manifest) | No native manifest |
37
- | Marketplace catalog | `.claude-plugin/marketplace.json` (repo root or package) | `.agents/plugins/marketplace.json` (repo root or package) | — | — |
47
+ ## Probo MCP servers
38
48
 
39
- ## Probo MCP (all agents)
49
+ `mcp.json` ships both hosted instances as Streamable HTTP servers:
40
50
 
41
- Set the instance URL:
51
+ | Server | Endpoint |
52
+ | --- | --- |
53
+ | `probo-us` | `https://us.probo.com/api/mcp/v1` |
54
+ | `probo-eu` | `https://eu.probo.com/api/mcp/v1` |
55
+
56
+ Connect the server for your region. Skills that need to discover the region
57
+ call `listOrganizations` on each connected server and keep the one that returns
58
+ the target organization.
59
+
60
+ Authentication is **OAuth 2.0** only, discovered from
61
+ `/.well-known/oauth-protected-resource` on the instance root. Never configure a
62
+ static bearer token: Agent Plugins treats `headers` as visible package data,
63
+ and a pre-set `Authorization` header also stops Claude Code from starting the
64
+ OAuth flow.
65
+
66
+ ### Self-hosted instances
67
+
68
+ Agent Plugins 1.0.0 performs no placeholder or environment-variable expansion
69
+ in remote MCP URLs (spec §7.2.1), so a self-hosted endpoint cannot ship in the
70
+ package. Add it in the agent:
42
71
 
43
72
  ```bash
44
- export PROBO_BASE_URL="https://your-probo-instance.example.com"
73
+ claude mcp add --transport http probo https://probo.example.com/api/mcp/v1
74
+ codex mcp add --transport http probo https://probo.example.com/api/mcp/v1
45
75
  ```
46
76
 
47
- Endpoint: `${PROBO_BASE_URL}/mcp/v1` (HTTP, OAuth 2.0). Do not configure a
48
- static bearer token — OAuth discovery uses
49
- `/.well-known/oauth-protected-resource`.
77
+ The MCP path is always `<instance-root>/api/mcp/v1`.
78
+
79
+ ## What works where
80
+
81
+ | Component | Agent Plugins client | Claude Code | Codex | OpenCode | Cursor |
82
+ | --- | --- | --- | --- | --- | --- |
83
+ | Probo MCP (OAuth) | ✅ `mcp.json` | ✅ `.mcp.json` | ✅ `.codex-plugin` + `.mcp.json` | ✅ Manual MCP config | ✅ IDE MCP settings |
84
+ | Skills (`SKILL.md`) | ✅ `skills/` | ✅ `skills/` | ✅ `skills/` via `.codex-plugin` | ✅ `.opencode/skills/` or `.claude/skills/` | ✅ Copy/symlink to `.cursor/skills/` |
85
+ | Commands | ❌ Outside v1 | ✅ `commands/` → `/probo:…` | ⚠️ Use skills instead | ⚠️ Native `skill` tool | ❌ Use skill or rules |
86
+ | Plugin manifest | `plugin.json` | `.claude-plugin/` | `.codex-plugin/` | Discovery paths (no manifest) | No native manifest |
87
+ | Marketplace catalog | — | `.claude-plugin/marketplace.json` (repo root or package) | `.agents/plugins/marketplace.json` (repo root or package) | — | — |
50
88
 
51
89
  ### Claude Code
52
90
 
@@ -58,7 +96,7 @@ claude plugin marketplace add getprobo/probo
58
96
  # or, from a local clone:
59
97
  claude plugin marketplace add .
60
98
  claude plugin install probo@probo
61
- claude mcp login probo # or /mcp in session
99
+ claude mcp login probo-us # or /mcp in session
62
100
  /probo:access-review Q3 GitHub review
63
101
  ```
64
102
 
@@ -67,7 +105,7 @@ claude mcp login probo # or /mcp in session
67
105
  ```bash
68
106
  claude plugin marketplace add ./packages/skills/.claude-plugin
69
107
  claude plugin install probo@probo
70
- claude mcp login probo
108
+ claude mcp login probo-us
71
109
  ```
72
110
 
73
111
  Or install the plugin directory directly:
@@ -86,7 +124,7 @@ codex plugin marketplace add getprobo/probo
86
124
  # or, from a local clone:
87
125
  codex plugin marketplace add .
88
126
  codex plugin install probo@probo
89
- codex mcp login probo
127
+ codex mcp login probo-us
90
128
  ```
91
129
 
92
130
  **From the package directory** (catalog at
@@ -95,14 +133,14 @@ codex mcp login probo
95
133
  ```bash
96
134
  codex plugin marketplace add ./packages/skills
97
135
  codex plugin install probo@probo
98
- codex mcp login probo
136
+ codex mcp login probo-us
99
137
  ```
100
138
 
101
139
  Or install the plugin directory directly:
102
140
 
103
141
  ```bash
104
142
  codex plugin install ./packages/skills
105
- codex mcp login probo
143
+ codex mcp login probo-us
106
144
  ```
107
145
 
108
146
  Skills load from `./skills/` via `.codex-plugin/plugin.json`. The repo-root
@@ -126,12 +164,14 @@ ln -s ../../packages/skills/skills/open-source-compliance .opencode/skills/open-
126
164
  [`opencode-claude-code-bridge`](https://www.npmjs.com/package/opencode-claude-code-bridge)
127
165
  to import Claude plugins and MCP configs into OpenCode.
128
166
 
129
- Configure Probo MCP in `opencode.json` or global OpenCode MCP settings, then
130
- authenticate. Invoke via the native `skill` tool (`access-review`).
167
+ Configure a Probo MCP server in `opencode.json` or global OpenCode MCP
168
+ settings, then authenticate. Invoke via the native `skill` tool
169
+ (`access-review`).
131
170
 
132
171
  ### Cursor
133
172
 
134
- 1. Add Probo MCP in Cursor settings (HTTP URL: `${PROBO_BASE_URL}/mcp/v1`,
173
+ 1. Add a Probo MCP server in Cursor settings (HTTP URL:
174
+ `https://us.probo.com/api/mcp/v1` or `https://eu.probo.com/api/mcp/v1`,
135
175
  OAuth).
136
176
  2. Copy or symlink skills into `.cursor/skills/`:
137
177
 
@@ -146,9 +186,11 @@ Reference the skill in chat or add a Cursor rule pointing at the skill.
146
186
 
147
187
  | Path | Portable? |
148
188
  | --- | --- |
189
+ | `plugin.json` | ✅ Agent Plugins manifest (spec §5) |
190
+ | `mcp.json` | ✅ Agent Plugins MCP configuration (spec §7.2) |
149
191
  | `skills/<name>/SKILL.md` | ✅ Agent Skills standard |
150
192
  | `skills/<name>/references/*.md` | ✅ Relative to skill directory |
151
- | `.mcp.json` with `${PROBO_BASE_URL}` | Standard env var |
193
+ | `.mcp.json` | Claude Code and Codex mirror of `mcp.json` (`type: http`) |
152
194
  | `${CLAUDE_PLUGIN_ROOT}` | ❌ Claude Code only — avoid in skill bodies |
153
195
  | `commands/*.md` | Claude Code slash commands only |
154
196
 
@@ -159,13 +201,15 @@ directory is discovered, regardless of which agent loads it.
159
201
 
160
202
  ```
161
203
  @probo/skills/
204
+ plugin.json # Agent Plugins manifest
205
+ mcp.json # Agent Plugins MCP configuration
206
+ skills/ # Shared skills (all agents)
207
+ commands/ # Claude Code commands only
208
+ .mcp.json # Claude Code / Codex MCP wiring
162
209
  .claude-plugin/plugin.json # Claude Code manifest
163
210
  .claude-plugin/marketplace.json # Claude marketplace (npm)
164
211
  .codex-plugin/plugin.json # Codex manifest
165
212
  .agents/plugins/marketplace.json # Codex marketplace (package-local)
166
- .mcp.json # Shared MCP wiring
167
- skills/ # Shared skills (all agents)
168
- commands/ # Claude Code commands only
169
213
  ```
170
214
 
171
215
  Repo root (monorepo / `getprobo/probo` Git installs):
@@ -174,3 +218,14 @@ Repo root (monorepo / `getprobo/probo` Git installs):
174
218
  .claude-plugin/marketplace.json # Claude marketplace → packages/skills
175
219
  .agents/plugins/marketplace.json # Codex marketplace → packages/skills
176
220
  ```
221
+
222
+ ## Validation
223
+
224
+ ```bash
225
+ npm --workspace @probo/skills run validate
226
+ ```
227
+
228
+ `scripts/validate.mjs` enforces the Agent Plugins closed manifest and MCP
229
+ schemas (canonical `$schema` values, plugin name constraints, transport
230
+ variants, literal HTTPS URLs, no credential headers), Agent Skills frontmatter
231
+ rules, and that `.mcp.json` stays in lockstep with `mcp.json`.
package/README.md CHANGED
@@ -1,20 +1,49 @@
1
1
  # @probo/skills
2
2
 
3
- Multi-agent compliance skills for open-source GRC workflows. Ships Agent
4
- Skills–compatible instructions and wires agents to the [Probo MCP
5
- API](https://github.com/getprobo/probo/tree/main/pkg/server/api/mcp/v1) via
3
+ Multi-agent compliance skills for open-source GRC workflows. Ships an
4
+ [Agent Plugins 1.0.0](https://agent-plugins.org/) package: Agent
5
+ Skills–compatible instructions plus portable MCP wiring to the [Probo MCP
6
+ API](https://github.com/getprobo/probo/tree/main/pkg/server/api/mcp/v1) over
6
7
  OAuth 2.0.
7
8
 
8
- **Supported agents:** Claude Code, Codex, OpenCode, Cursor (MCP + skills).
9
+ **Supported agents:** any Agent Plugins client, plus Claude Code, Codex,
10
+ OpenCode, and Cursor through their own plugin or MCP configuration.
9
11
 
10
- Marketplace catalogs: `.claude-plugin/marketplace.json` at the repo root or
11
- under `packages/skills/` (Claude Code), `.agents/plugins/marketplace.json` at
12
- the repo root or under `packages/skills/` (Codex). See
12
+ The portable package is `plugin.json`, `skills/`, and `mcp.json` at the package
13
+ root. Client-specific manifests (`.claude-plugin/`, `.codex-plugin/`,
14
+ `.mcp.json`) and marketplace catalogs sit alongside it. See
13
15
  [COMPATIBILITY.md](./COMPATIBILITY.md).
14
16
 
17
+ ## Probo MCP servers
18
+
19
+ Both hosted Probo instances ship in `mcp.json`; connect the one for your
20
+ region and sign in with OAuth 2.0.
21
+
22
+ | Server | Endpoint |
23
+ | --- | --- |
24
+ | `probo-us` | `https://us.probo.com/api/mcp/v1` |
25
+ | `probo-eu` | `https://eu.probo.com/api/mcp/v1` |
26
+
27
+ Agent Plugins 1.0.0 defines no placeholder expansion for remote MCP URLs, so a
28
+ self-hosted instance is added in the agent instead of in the package:
29
+
30
+ ```bash
31
+ claude mcp add --transport http probo https://probo.example.com/api/mcp/v1
32
+ ```
33
+
34
+ No API token or bearer header belongs in any of these configs. Probo MCP
35
+ authenticates with OAuth 2.0, discovered from
36
+ `/.well-known/oauth-protected-resource` on the instance root.
37
+
15
38
  ## Install
16
39
 
17
- ### From GitHub or npm
40
+ ### Agent Plugins client
41
+
42
+ Point the client at the package root (`packages/skills` in a clone, or the
43
+ installed `@probo/skills` directory). It reads `plugin.json`, discovers the
44
+ skills under `skills/`, and loads both servers from `mcp.json`.
45
+
46
+ ### Claude Code
18
47
 
19
48
  **From GitHub** (repo-root catalog at `.claude-plugin/marketplace.json`):
20
49
 
@@ -23,6 +52,7 @@ claude plugin marketplace add getprobo/probo
23
52
  # or, from a local clone:
24
53
  claude plugin marketplace add .
25
54
  claude plugin install probo@probo
55
+ claude mcp login probo-us # or /mcp in session
26
56
  ```
27
57
 
28
58
  **From the package directory** (catalog at
@@ -34,35 +64,6 @@ claude plugin marketplace add ./packages/skills/.claude-plugin
34
64
  claude plugin install probo@probo
35
65
  ```
36
66
 
37
- When consuming the published package, the package-level marketplace entry
38
- resolves `@probo/skills` from npm (see
39
- `packages/skills/.claude-plugin/marketplace.json`).
40
-
41
- ### Configure Probo MCP
42
-
43
- Set your Probo instance URL before starting Claude Code:
44
-
45
- ```bash
46
- export PROBO_BASE_URL="https://your-probo-instance.example.com"
47
- ```
48
-
49
- The plugin `.mcp.json` connects to `${PROBO_BASE_URL}/mcp/v1`. Probo MCP
50
- authenticates with **OAuth 2.0** — no API token or bearer header is required in
51
- the plugin config. On first use, sign in from Claude Code:
52
-
53
- ```text
54
- /mcp
55
- ```
56
-
57
- Or from your shell:
58
-
59
- ```bash
60
- claude mcp login probo
61
- ```
62
-
63
- Claude Code discovers Probo's authorization server via
64
- `/.well-known/oauth-protected-resource` and stores tokens securely.
65
-
66
67
  ### Local development
67
68
 
68
69
  ```bash
@@ -73,9 +74,10 @@ claude --plugin-dir ./packages/skills
73
74
 
74
75
  | Component | Location | Purpose |
75
76
  | --- | --- | --- |
76
- | MCP | `.mcp.json` | Probo API connection |
77
+ | Manifest | `plugin.json` | Agent Plugins 1.0.0 plugin identity |
78
+ | MCP | `mcp.json` | Portable hosted Probo servers |
77
79
  | Skills | `skills/` | Compliance workflows |
78
- | Commands | `commands/` | `access-review`, `missing-signatures` — semi-auto workflows |
80
+ | Commands | `commands/` | `access-review`, `missing-signatures` — semi-auto workflows (Claude Code) |
79
81
 
80
82
  Skills: `/probo:<skill-name>` (e.g. `/probo:open-source-compliance`, `/probo:missing-signatures`).
81
83
 
package/mcp.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
3
+ "mcpServers": {
4
+ "probo-us": {
5
+ "type": "streamable-http",
6
+ "url": "https://us.probo.com/api/mcp/v1"
7
+ },
8
+ "probo-eu": {
9
+ "type": "streamable-http",
10
+ "url": "https://eu.probo.com/api/mcp/v1"
11
+ }
12
+ }
13
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@probo/skills",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "description": "Multi-agent compliance skills for open-source GRC (Claude Code, Codex, OpenCode) powered by Probo MCP",
5
5
  "private": false,
6
6
  "scripts": {
@@ -18,6 +18,8 @@
18
18
  ".agents",
19
19
  "skills",
20
20
  "commands",
21
+ "plugin.json",
22
+ "mcp.json",
21
23
  ".mcp.json",
22
24
  "README.md",
23
25
  "COMPATIBILITY.md"
@@ -25,6 +27,7 @@
25
27
  "keywords": [
26
28
  "claude-code",
27
29
  "agent-skills",
30
+ "agent-plugins",
28
31
  "codex",
29
32
  "opencode",
30
33
  "probo",
@@ -34,6 +37,9 @@
34
37
  "open-source"
35
38
  ],
36
39
  "license": "MIT",
40
+ "devDependencies": {
41
+ "js-yaml": "^4.3.1"
42
+ },
37
43
  "repository": {
38
44
  "type": "git",
39
45
  "url": "git+https://github.com/getprobo/probo.git",
package/plugin.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
+ "name": "probo",
4
+ "version": "0.3.0",
5
+ "description": "Open-source compliance workflows powered by the Probo MCP API",
6
+ "author": {
7
+ "name": "Probo Inc",
8
+ "email": "hello@probo.com",
9
+ "url": "https://www.probo.com"
10
+ },
11
+ "homepage": "https://github.com/getprobo/probo/tree/main/packages/skills",
12
+ "repository": "https://github.com/getprobo/probo",
13
+ "license": "MIT",
14
+ "keywords": [
15
+ "probo",
16
+ "compliance",
17
+ "grc",
18
+ "mcp",
19
+ "agent-skills",
20
+ "open-source"
21
+ ]
22
+ }
@@ -18,13 +18,30 @@ Before executing, read these files **relative to this skill directory**:
18
18
 
19
19
  ## Preconditions
20
20
 
21
- 1. Probo MCP must be connected. If tools fail with auth errors, stop and tell
22
- the user to complete OAuth sign-in for the Probo MCP server in their agent
23
- (Claude Code: `/mcp` or `claude mcp login probo`; Codex: `codex mcp login
24
- probo`; OpenCode/Cursor: configure MCP in settings then authenticate).
25
- 2. Resolve the campaign from `$ARGUMENTS` (name match or GID). If ambiguous,
26
- list `listAccessReviewCampaigns` results and ask the user to pick one.
27
- 3. Campaign `status` must be `IN_PROGRESS` or `PENDING_ACTIONS`. Stop with a
21
+ 1. A Probo MCP server must be connected. The plugin ships two hosted servers,
22
+ `probo-us` and `probo-eu`; self-hosted instances are configured in the agent.
23
+ If tools fail with auth errors, stop and tell the user to complete OAuth
24
+ sign-in for that server (Claude Code: `/mcp` or `claude mcp login probo-us`;
25
+ Codex: `codex mcp login probo-us`; OpenCode/Cursor: configure MCP in settings
26
+ then authenticate).
27
+ 2. Resolve **the server**, then **the organization**. These are separate
28
+ choices: one server can hold several organizations, and the caller can have
29
+ organizations on more than one server. Settle both before any campaign call,
30
+ because `listAccessReviewCampaigns` requires `organization_id`.
31
+ - **Server.** Use the server for the region the user names, or the only
32
+ connected server when there is one. Otherwise call `listOrganizations` on
33
+ each connected server and take the server whose organizations uniquely
34
+ match the one the user named. Never infer the region from a merely
35
+ non-empty result — when the match is not unique, show each server with the
36
+ organizations it returned and ask which to use.
37
+ - **Organization.** Once the server is settled, call `listOrganizations` on
38
+ it unless an earlier probe already returned its organizations. Take the
39
+ unique name match, or the only organization when the server returns one.
40
+ Otherwise list them and ask the user to pick.
41
+ 3. Resolve the campaign from `$ARGUMENTS` (name match or GID) within that
42
+ organization. If the campaign is ambiguous, list `listAccessReviewCampaigns`
43
+ results and ask the user to pick one.
44
+ 4. Campaign `status` must be `IN_PROGRESS` or `PENDING_ACTIONS`. Stop with a
28
45
  clear message for `DRAFT`, `COMPLETED`, or `CANCELLED`.
29
46
 
30
47
  ## Working notes file
@@ -1,7 +1,26 @@
1
1
  # Access review MCP tools
2
2
 
3
- All tools are on the Probo MCP server (`probo`). Read each tool schema before
4
- calling.
3
+ All tools are on a Probo MCP server (`probo-us`, `probo-eu`, or a self-hosted
4
+ server configured in the agent). Read each tool schema before calling.
5
+
6
+ ## Organization scope
7
+
8
+ ### `listOrganizations`
9
+
10
+ List organizations the caller can access on the server it is called on. No
11
+ required input, so it serves two distinct purposes:
12
+
13
+ 1. **Choosing a server** when the region is unknown — call it on each connected
14
+ server. A non-empty result does not identify the region, since the caller can
15
+ have organizations on both. Only a unique match for the organization the user
16
+ named settles it; otherwise show each server with its organizations and ask.
17
+ 2. **Choosing an organization** on a server that is already settled — including
18
+ a single self-hosted instance serving several organizations. Take the unique
19
+ name match, or the only organization when the server returns one, and
20
+ otherwise list them and ask.
21
+
22
+ Either way the organization must be resolved before `listAccessReviewCampaigns`,
23
+ which requires `organization_id`.
5
24
 
6
25
  ## Read
7
26
 
@@ -10,7 +29,7 @@ calling.
10
29
  List campaigns for an organization. Use to resolve `$ARGUMENTS` to a campaign
11
30
  when the user provides a name instead of a GID.
12
31
 
13
- Required: `organization_id`
32
+ Required: `organization_id` — resolve the organization before calling this.
14
33
 
15
34
  ### `listAccessEntries`
16
35
 
@@ -48,9 +48,9 @@ Commitments must trace to controls the company genuinely has. The source of trut
48
48
  **published policies** in Probo, not general knowledge about SOC 2 or ISO 27001.
49
49
 
50
50
  1. **Find the Probo MCP and the organization.** This environment may expose more than one Probo MCP
51
- server (for example a US and an EU instance). Call `listOrganizations` on each until you find the one
52
- that returns the target company, and use that server for every later call. Match the organization the
53
- user named and capture its `id`.
51
+ server (the plugin ships hosted `probo-us` and `probo-eu`, and self-hosted instances add their own).
52
+ Call `listOrganizations` on each until you find the one that returns the target company, and use that
53
+ server for every later call. Match the organization the user named and capture its `id`.
54
54
  2. **List the published policies.** Call `listDocuments` with `document_types: ["POLICY"]`. Policies with
55
55
  a `current_published_major` are published.
56
56
  3. **Read the actual content.** `getDocument` returns metadata only. To get the text, call
@@ -21,10 +21,14 @@ Before executing, read these files **relative to this skill directory**:
21
21
 
22
22
  ## Preconditions
23
23
 
24
- 1. Probo MCP must be connected. If tools fail with auth errors, stop and tell
25
- the user to complete OAuth sign-in for the Probo MCP server in their agent
26
- (Claude Code: `/mcp` or `claude mcp login probo`; Codex: `codex mcp login
27
- probo`; OpenCode/Cursor: configure MCP in settings then authenticate).
24
+ 1. A Probo MCP server must be connected. The plugin ships two hosted servers,
25
+ `probo-us` and `probo-eu`; self-hosted instances are configured in the agent.
26
+ Use the server for the user's region, and when the region is unknown call
27
+ `listOrganizations` on each connected server and keep the one that returns
28
+ the organization. If tools fail with auth errors, stop and tell the user to
29
+ complete OAuth sign-in for that server (Claude Code: `/mcp` or
30
+ `claude mcp login probo-us`; Codex: `codex mcp login probo-us`;
31
+ OpenCode/Cursor: configure MCP in settings then authenticate).
28
32
  2. Resolve the organization from `$ARGUMENTS` (name match or GID). If ambiguous,
29
33
  call `listOrganizations` and ask the user to pick one.
30
34
  3. This skill is **reporting only**. Do not request signatures, cancel requests,
@@ -1,7 +1,7 @@
1
1
  # Missing signatures MCP tools
2
2
 
3
- All tools are on the Probo MCP server (`probo`). Read each tool schema before
4
- calling.
3
+ All tools are on a Probo MCP server (`probo-us`, `probo-eu`, or a self-hosted
4
+ server configured in the agent). Read each tool schema before calling.
5
5
 
6
6
  ## Organization scope
7
7
 
@@ -11,10 +11,13 @@ first.
11
11
 
12
12
  ## Before you start
13
13
 
14
- 1. Confirm the Probo MCP server is connected. If not, ask the user to run
15
- `/mcp` or `claude mcp login probo` to complete the OAuth 2.0 sign-in.
14
+ 1. Confirm a Probo MCP server is connected. The plugin ships two hosted
15
+ servers, `probo-us` and `probo-eu`; self-hosted instances are configured in
16
+ the agent. If none is connected, ask the user to run `/mcp` or
17
+ `claude mcp login probo-us` to complete the OAuth 2.0 sign-in.
16
18
  2. Identify the target organization. List organizations if the user did not
17
- provide one.
19
+ provide one, and when several servers are connected use the one that returns
20
+ the target organization.
18
21
  3. Prefer MCP tools over manual API calls. The Probo MCP API mirrors the
19
22
  platform's GraphQL surface.
20
23
 
@@ -1,23 +1,28 @@
1
1
  # Open-source compliance workflows
2
2
 
3
- This plugin wraps Probo's MCP API for Claude Code. Probo is a self-hostable
4
- GRC platform; its MCP server exposes tools for third parties, controls,
5
- obligations, risks, documents, audits, access reviews, and more.
3
+ This plugin wraps Probo's MCP API. Probo is a self-hostable GRC platform; its
4
+ MCP server exposes tools for third parties, controls, obligations, risks,
5
+ documents, audits, access reviews, and more.
6
6
 
7
- ## Authentication
7
+ ## Servers
8
8
 
9
- Probo MCP uses OAuth 2.0. Users sign in once via `/mcp` or
10
- `claude mcp login probo`; Claude Code stores and refreshes tokens
11
- automatically. Do not ask the user for API keys or bearer tokens for MCP
12
- access.
9
+ The plugin ships the two hosted Probo instances. A self-hosted instance is
10
+ added in the agent's own MCP configuration.
13
11
 
14
- | Variable | Purpose |
12
+ | Server | Endpoint |
15
13
  | --- | --- |
16
- | `PROBO_BASE_URL` | Probo instance root URL (no trailing slash) |
14
+ | `probo-us` | `https://us.probo.com/api/mcp/v1` |
15
+ | `probo-eu` | `https://eu.probo.com/api/mcp/v1` |
16
+ | self-hosted | `<instance-root>/api/mcp/v1` |
17
17
 
18
- MCP endpoint: `${PROBO_BASE_URL}/mcp/v1`
18
+ ## Authentication
19
+
20
+ Probo MCP uses OAuth 2.0. Users sign in once per server via `/mcp` or
21
+ `claude mcp login probo-us`; the agent stores and refreshes tokens
22
+ automatically. Do not ask the user for API keys or bearer tokens for MCP
23
+ access.
19
24
 
20
- OAuth discovery:
25
+ OAuth discovery (on the instance root, not the MCP path):
21
26
 
22
27
  - Protected resource metadata: `/.well-known/oauth-protected-resource`
23
28
  - Authorization server metadata: `/.well-known/oauth-authorization-server`