MCP server for Snyk API & Web (Probely) — create targets, run scans, manage findings
Project description
Snyk API & Web MCP Server
Connect your AI coding assistant to Snyk API & Web so it can onboard scan targets, configure authentication, run DAST scans, and triage findings — all through natural language.
Built on FastMCP 2.0, works with Cursor, Claude Code, Devin, Windsurf, and any MCP-compatible client.
Naming note: Snyk API & Web was formerly known as Probely. The API endpoints (
api.probely.com), web console (plus.probely.app), and MCP tool names (probely_*) still use the legacy domain and prefix. Environment variables and config sections use the newSAW/sawnaming.
See USER_GUIDE.md for usage, examples, and tool reference.
This repository is closed to public contributions. We appreciate community interest, but we do not accept pull requests, issues, or other contributions from external contributors at this time. If you have found a security issue, please see SECURITY.md.
Requirements
- Python 3.10+
- Snyk API & Web API key
Quick Start
1. Get Your API Key
Go to https://plus.probely.app/api-keys and create an API key.
Important
Use a custom role, limited-scope API key for the Snyk API & Web MCP Server. Create the key only with the permissions required for the intended actions. Do not use a highly privileged or global API key, as this can affect your entire account and its resources.
2. Install
Cursor Marketplace (recommended)
Install directly from the Cursor Marketplace:
- Open Cursor and go to Settings → Plugins
- Search for Snyk API & Web
- Click Install
- Set your API key as an environment variable:
export MCP_SAW_API_KEY="your-api-key"
The plugin installs the MCP server, rules, and skills automatically.
One-command install (any MCP client)
uvx --from git+https://github.com/snyk/saw-mcp.git saw-mcp
Or add to your MCP client configuration:
{
"mcpServers": {
"SAW": {
"command": "uvx",
"args": ["--from", "git+https://github.com/snyk/saw-mcp.git", "saw-mcp"],
"env": {
"MCP_SAW_API_KEY": "your-api-key"
}
}
}
}
Alternative installation methods
Install from release tarball
tar -xzvf SnykAPIWeb-<version>.tgz
cd SnykAPIWeb
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
Download from Releases and replace <version> with the actual version number (e.g., 1.0.0).
Clone from source
git clone https://github.com/snyk/saw-mcp.git
cd saw-mcp
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
3. Store Your API Key
The server reads your API key from (in order of precedence): environment variable MCP_SAW_API_KEY → .env file → config/config.yaml.
Option A: Environment variable (recommended for Marketplace / uvx installs)
export MCP_SAW_API_KEY="your-api-key"
Option B: .env file (recommended for source installs)
Run the setup script (prompts securely, no key in shell history):
./scripts/setup-env.sh
Or pipe from a secret manager: op read 'op://vault/item/key' | ./scripts/setup-env.sh
This writes a .env file in the project root (gitignored). The server loads it automatically at startup.
4. Configure Your IDE
If you installed from the Cursor Marketplace, configuration is automatic. For other clients, add to your MCP client configuration:
{
"mcpServers": {
"SAW": {
"command": "uvx",
"args": ["--from", "git+https://github.com/snyk/saw-mcp.git", "saw-mcp"],
"env": {
"MCP_SAW_API_KEY": "your-api-key"
}
}
}
}
For host-specific setup see the Installation Guides.
Additional configuration options
- Override the base URL: add
"MCP_SAW_BASE_URL": "https://your-instance-url"to theenvblock. - Use a config file: set
"MCP_SAW_CONFIG_PATH": "/path/to/config.yaml"instead. - Set log level: add
"MCP_SAW_LOG_LEVEL": "DEBUG"(options: DEBUG, INFO, WARNING, ERROR, CRITICAL; default: INFO).
5. Start Using
Ask your AI assistant to:
- "Configure a Snyk API & Web API target from this OpenAPI schema / Swagger document / Postman collection."
- "Configure a Snyk API & Web web target for this authenticated application."
See prompts.md for a full catalog of example prompts — from simple one-liners to complex multi-target workflows.
IDE Integration
Detailed per-host guides live in docs/installation-guides/:
| Host | Guide |
|---|---|
| Cursor | install-cursor.md |
| Windsurf | install-windsurf.md |
| Claude Desktop | install-claude.md |
| Devin / Other IDEs | install-devin.md |
Packaging
bash scripts/package.sh
Creates dist/SnykAPIWeb-<version>.tgz (version from snyk_apiweb/__init__.py).
Development & Testing
Run the Server (standalone)
Running the server directly starts it and waits for an MCP client connection. This is mainly useful for development and debugging:
./venv/bin/python -m snyk_apiweb.server
Development Mode (hot reload)
For active development with automatic reload on file changes:
./scripts/dev.sh
License
This project is licensed under the Apache License 2.0.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file snyk_apiweb_mcp-1.1.2.tar.gz.
File metadata
- Download URL: snyk_apiweb_mcp-1.1.2.tar.gz
- Upload date:
- Size: 35.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9cd79297e0ea9d33c0f154d107f454e4559a3c8f699ec4b1a5a9fa971f52b451
|
|
| MD5 |
34ac9803afe4fe2fbf56dde06dfda1cf
|
|
| BLAKE2b-256 |
9e59faf9af6df487f93a7e950cc642a1266d889fc706fbc38ddef0f4f641718e
|
Provenance
The following attestation bundles were made for snyk_apiweb_mcp-1.1.2.tar.gz:
Publisher:
release.yml on snyk/saw-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
snyk_apiweb_mcp-1.1.2.tar.gz -
Subject digest:
9cd79297e0ea9d33c0f154d107f454e4559a3c8f699ec4b1a5a9fa971f52b451 - Sigstore transparency entry: 1394326288
- Sigstore integration time:
-
Permalink:
snyk/saw-mcp@839efe64764849314d83981eaaf69b9e2d28c1ce -
Branch / Tag:
refs/tags/v1.1.2 - Owner: https://github.com/snyk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@839efe64764849314d83981eaaf69b9e2d28c1ce -
Trigger Event:
push
-
Statement type:
File details
Details for the file snyk_apiweb_mcp-1.1.2-py3-none-any.whl.
File metadata
- Download URL: snyk_apiweb_mcp-1.1.2-py3-none-any.whl
- Upload date:
- Size: 29.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2d8d738ead820513dc06acf58344f00e8a6565db350b942abfb3bf4cf062ee83
|
|
| MD5 |
aa6902ca7fd09883ecf4213b901c9c34
|
|
| BLAKE2b-256 |
3b75cc9b0ea70828a9bb6f0f06c4f5dd88f59625df202c3ae6149efb2a285b4d
|
Provenance
The following attestation bundles were made for snyk_apiweb_mcp-1.1.2-py3-none-any.whl:
Publisher:
release.yml on snyk/saw-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
snyk_apiweb_mcp-1.1.2-py3-none-any.whl -
Subject digest:
2d8d738ead820513dc06acf58344f00e8a6565db350b942abfb3bf4cf062ee83 - Sigstore transparency entry: 1394326332
- Sigstore integration time:
-
Permalink:
snyk/saw-mcp@839efe64764849314d83981eaaf69b9e2d28c1ce -
Branch / Tag:
refs/tags/v1.1.2 - Owner: https://github.com/snyk
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@839efe64764849314d83981eaaf69b9e2d28c1ce -
Trigger Event:
push
-
Statement type: