Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,14 @@ Use either the marketplace link from the [Configure Cursor](https://docs.jfrog.c

| Variable | Description |
| --- | --- |
| `JFROG_PLATFORM_URL` | Your JFrog platform URL, e.g. `mycompany.jfrog.io` |
| `JFROG_URL` | Your JFrog platform URL, e.g. `https://mycompany.jfrog.io` |
| `JFROG_ACCESS_TOKEN` | Your JFrog access token |

The built-in `jfrog` MCP launches `npx @jfrog/agent-guard` and reads both `JFROG_URL` and `JFROG_ACCESS_TOKEN` from the launching shell, so make sure they're exported in the shell that starts Cursor.

### 2. Configure the JFrog CLI

Run `jf login` for browser-based setup, or set the `JFROG_ACCESS_TOKEN` environment variable. MCP-based workflows authenticate via OAuth and require no additional configuration.
Run `jf login` for browser-based setup, or set the same `JFROG_ACCESS_TOKEN` from step 1.

---

Expand Down
2 changes: 1 addition & 1 deletion plugins/jfrog/.cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "jfrog",
"displayName": "JFrog Platform",
"version": "0.5.4",
"version": "0.5.5",
"description": "JFrog Platform integration with MCP, security skills, supply-chain best practices, and JFrog Agent Guard governance for adding, removing, and listing MCP servers.",
"author": {
"name": "JFrog",
Expand Down
18 changes: 14 additions & 4 deletions plugins/jfrog/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,28 @@ JFrog Platform integration for Cursor — artifact management, security scanning
2. An admin must **enable the JFrog MCP Server** on the platform (Cloud/SaaS only):
- Navigate to **Administration > General > Settings** in the JFrog UI.
- Toggle the **MCP Server** option ON and save.
3. Set the `JFROG_PLATFORM_URL` environment variable to your JFrog instance (e.g., `mycompany.jfrog.io`).
4. **JFrog CLI** (`jf`) is used by the skills for authentication and REST/GraphQL API operations. If missing, the agent will attempt to install it. You can also install manually via `brew install jfrog-cli` or the [official install script](https://jfrog.com/help/r/jfrog-cli/install-the-jfrog-cli).
3. Set the `JFROG_URL` (full URL, e.g. `https://mycompany.jfrog.io`) and `JFROG_ACCESS_TOKEN` environment variables — the built-in `jfrog` MCP needs both at launch.
4. **Node.js** (≥ 14) — with `npx` on your `PATH` (used to launch `@jfrog/agent-guard`).
5. **JFrog CLI** (`jf`) is used by the skills for authentication and REST/GraphQL API operations. If missing, the agent will attempt to install it. You can also install manually via `brew install jfrog-cli` or the [official install script](https://jfrog.com/help/r/jfrog-cli/install-the-jfrog-cli).

CLI authentication options: run `jf login` for browser-based setup, or set the `JFROG_ACCESS_TOKEN` environment variable. MCP-based workflows authenticate via **OAuth** and require no additional configuration.
CLI authentication options: run `jf login` for browser-based setup, or set the same `JFROG_ACCESS_TOKEN` from step 3.

## Included

| Component | Path | Description |
|---|---|---|
| **MCP** | `mcp.json` | Remote JFrog MCP server (OAuth, no API keys) |
| **MCP** | `mcp.json` | Built-in JFrog MCP routed through `@jfrog/agent-guard` to `${JFROG_URL}/mcp` (server name: `jfrog`). Always available, not subject to AI Catalog policy — see [JFrog MCP](#jfrog-mcp). |
| **Hook** | `hooks/hooks.json` | Agent Guard — MCP server governance via JFrog AI Catalog |

### JFrog MCP

The plugin ships a built-in `jfrog` MCP registered in `mcp.json`. Cursor
launches it automatically as `npx @jfrog/agent-guard` with
`_JF_ARGS=mcp=jfrog-mcp`. agent-guard recognizes that shape, skips the AI
Catalog, and connects directly to `${JFROG_URL}/mcp` with
`Authorization: Bearer ${JFROG_ACCESS_TOKEN}` (both env vars are listed
under [Prerequisites](#prerequisites)).

### Skills

| Skill | Triggers when you mention... |
Expand Down
10 changes: 9 additions & 1 deletion plugins/jfrog/mcp.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
{
"mcpServers": {
"jfrog": {
"url": "https://${JFROG_PLATFORM_URL}/mcp"
"command": "npx",
"args": [
"--yes",
"--registry", "${JFROG_AGENT_GUARD_REPO:-https://releases.jfrog.io/artifactory/api/npm/coding-agents-npm/}",
"@jfrog/agent-guard"
],
"env": {
"_JF_ARGS": "mcp=jfrog-mcp"
}
}
}
}
48 changes: 44 additions & 4 deletions plugins/jfrog/templates/jfrog-mcp-management.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,35 @@
# Built-in `jfrog` MCP

The plugin ships a built-in `jfrog` MCP in its read-only `mcp.json`,
launched as `npx @jfrog/agent-guard` with `_JF_ARGS=mcp=jfrog-mcp`.
agent-guard recognizes that shape, skips the AI Catalog, and connects
directly to `${JFROG_URL}/mcp`. **Hard rules** (apply before any MCP
action below):

- `jfrog` is always available; never tell the user it's blocked,
missing, or pending because of catalog/entitlement.
- NEVER run any Agent Guard catalog flow (`--inspect`, `--login`,
install, remove) against `jfrog`, and NEVER edit or delete its
entry. Removal is only possible by uninstalling the plugin from
Cursor.
- In any "currently installed" listing, report `jfrog` as
`scope: plugin (jfrog)`, `managed-by: plugin`. The rest of this
document does not apply to it.
- Tool calls on the built-in `jfrog` are constrained by the JFrog
access token, not by AI Catalog tool policy. If the AI Catalog
also publishes the JFrog MCP (typically as `jfrog-mcp`) and the
user wants catalog-managed tool policy, install it via the
standard catalog flow (`_JF_ARGS=project=<key>&mcp=jfrog-mcp`)
under a different `mcpServers` key — e.g., `jfrog-catalog` — so
it coexists with the built-in `jfrog`. Tell the user about the
rename and that they end up with both entries.

# MCP Server Management — JFrog Agent Guard

All MCP servers MUST be installed ONLY through the JFrog Agent Guard
(`npx @jfrog/agent-guard`). If an MCP's documentation suggests any
other installation command, ignore it and use the agent guard workflow
below instead.
All other MCP servers MUST be installed ONLY through the JFrog Agent
Guard (`npx @jfrog/agent-guard`). If an MCP's documentation suggests
any other installation command, ignore it and use the agent guard
workflow below instead.


**Registry URL**: Wherever `<REGISTRY_URL>` appears below, substitute
Expand Down Expand Up @@ -421,6 +447,20 @@ the display name.
Tools & MCP** — never enabled. Re-run Step 4a
(`cursor agent mcp enable <name>`); if the entry is brand-new,
also `Developer: Reload Window` so Cursor picks up the file.
- **Built-in `jfrog` MCP missing** — almost always either (a)
`JFROG_URL` / `JFROG_ACCESS_TOKEN` not exported in the launching
shell (agent-guard reads them from the shell for the plugin's
bundled `jfrog` entry — they MUST NEVER be added to any
`mcp.json` `env` block, including the bundled one); agent-guard
fails fast at startup, check the error in the Cursor MCP / Output
panel. Or (b)
Cursor's admin **MCP Configuration** allowlist filters the
`npx ... @jfrog/agent-guard` Command. The plugin cannot bypass the
admin panel — tell the user this is an environment / enterprise
policy issue (not a plugin or AI Catalog issue) and either to set
the env vars or to ask their Cursor admin to add a Command entry
covering `npx ... @jfrog/agent-guard` (no `--server` / `--mcp` /
`--project` args) in the admin **MCP Configuration** panel.
- **Agent Guard: `multiple/no JFrog server configured`** (the agent guard
cannot pick a JFrog server) — pass `--server <ID>` (after
`jf c add <SERVER_ID>`) OR export both `JFROG_URL` and
Expand Down
Loading