pinelabs-mcp-local-setup — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited pinelabs-mcp-local-setup (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Guide users through setting up the Pine Labs MCP server locally and generating configuration for their preferred MCP client.
Before starting, verify:
python3 --versionclient_id and client_secretIf Docker-based setup, only Docker is needed.
# 1. Create and activate virtual environment
python -m venv .venv
source .venv/bin/activate # macOS/Linux
# .venv\Scripts\activate # Windows
# 2. Install dependencies
pip install -r requirements.txt
# 3. Create .env file (optional — avoids passing CLI args)
cat > .env << 'EOF'
PINELABS_CLIENT_ID=<your-client-id>
PINELABS_CLIENT_SECRET=<your-client-secret>
PINELABS_ENV=uat
LOG_LEVEL=INFO
EOF
# 4. Test the server starts
python -m cli.pinelabs_mcp_server.main stdio \
--client-id <your-client-id> \
--client-secret <your-client-secret> \
--env uat# 1. Create .env file
cat > .env << 'EOF'
PINELABS_CLIENT_ID=<your-client-id>
PINELABS_CLIENT_SECRET=<your-client-secret>
PINELABS_ENV=uat
EOF
# 2. Build the image
docker build -t pinelabs-mcp-server .
# 3. Run via docker compose
cd examples && docker compose upAsk the user which client they need, then generate the appropriate config.
File: .vscode/mcp.json (workspace) or user settings
{
"mcp": {
"inputs": [
{
"type": "promptString",
"id": "pinelabs_client_id",
"description": "Pine Labs Client ID"
},
{
"type": "promptString",
"id": "pinelabs_client_secret",
"description": "Pine Labs Client Secret",
"password": true
}
],
"servers": {
"pinelabs": {
"command": "python",
"args": [
"-m", "cli.pinelabs_mcp_server.main", "stdio",
"--client-id", "${input:pinelabs_client_id}",
"--client-secret", "${input:pinelabs_client_secret}"
]
}
}
}
}With env and toolset options (append to args array as needed):
"--env", "prod" — use production environment"--read-only" — only register read tools"--toolsets", "payment_links,orders" — enable specific toolsets onlyFile: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Claude Desktop does not support input prompts — use the env key for credentials:
{
"mcpServers": {
"pinelabs": {
"command": "python",
"args": ["-m", "cli.pinelabs_mcp_server.main", "stdio"],
"env": {
"PINELABS_CLIENT_ID": "<your-client-id>",
"PINELABS_CLIENT_SECRET": "<your-client-secret>",
"PINELABS_ENV": "uat"
}
}
}
}File: .cursor/mcp.json (workspace) or ~/.cursor/mcp.json (global)
{
"mcpServers": {
"pinelabs": {
"command": "python",
"args": [
"-m", "cli.pinelabs_mcp_server.main", "stdio",
"--client-id", "<your-client-id>",
"--client-secret", "<your-client-secret>"
]
}
}
}| Variable | Required | Default | Description |
|---|---|---|---|
PINELABS_CLIENT_ID | Yes | — | OAuth2 client ID |
PINELABS_CLIENT_SECRET | Yes | — | OAuth2 client secret |
PINELABS_ENV | No | uat | uat or prod |
PINELABS_BASE_URL | No | auto | Override API base URL |
PINELABS_TOKEN_URL | No | auto | Override token endpoint |
LOG_LEVEL | No | INFO | DEBUG, INFO, WARNING, ERROR |
LOG_FILE | No | stderr | Log output path |
HTTP_TIMEOUT | No | 30.0 | Request timeout in seconds |
| Argument | Env equivalent | Description |
|---|---|---|
--client-id | PINELABS_CLIENT_ID | OAuth2 client ID |
--client-secret | PINELABS_CLIENT_SECRET | OAuth2 client secret |
--env | PINELABS_ENV | uat or prod |
--log-file | LOG_FILE | Log output path |
--log-level | LOG_LEVEL | Logging level |
--read-only | — | Register only read tools |
--toolsets | — | Comma-separated toolset list |
| Toolset | Tools (count) | Type |
|---|---|---|
payment_links | 5 | Read + Write |
orders | 2 | Read + Write |
checkout_orders | 1 | Write |
subscriptions | 22 | Read + Write |
upi_intent_qr | 1 | Write |
mcp_api | 4 | Read |
api_docs | 2 | Read |
success_rate | 1 | Read |
| Environment | Base URL | Token URL |
|---|---|---|
| UAT | https://pluraluat.v2.pinepg.in/api | https://pluraluat.v2.pinepg.in/api/auth/v1/token |
| Production | https://api.pluralpay.in/api | https://api.pluralpay.in/api/auth/v1/token |
make test (source) or docker build + docker compose up (Docker)--read-only in production-facing setups to prevent write operations--toolsets to limit tool surface area to what is needed~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.