
Research
/Security News
GlassWASM: WebAssembly Malware Found in Trojanized Open VSX Extensions
The trojanized extensions use TinyGo-compiled WebAssembly and Solana transaction memos to resolve command-and-control infrastructure.
sprinklr-mcp
Advanced tools
An open-source MCP server that gives AI assistants read-only access to your Sprinklr data. Works with Claude, ChatGPT, Copilot, Cursor, or any MCP-compatible client.
How it works: You deploy this server with your Sprinklr API credentials. Your AI assistant connects to it via MCP and can query reports, search cases, and call any read-only Sprinklr API endpoint --- using your existing permissions. No new access surface, no data leaves your infrastructure.
npm install -g sprinklr-mcp
Create a .env file in your working directory with your Sprinklr credentials (see .env.example for the template), then run:
sprinklr-mcp
Do not pass credentials as inline environment variables. They will be saved in your shell history.
git clone https://github.com/daiict218/sprinklr-mcp.git
cd sprinklr-mcp
npm install
cp .env.example .env # fill in your Sprinklr credentials
npm test # verify connectivity
npm start # server runs on port 3000
Then connect your AI client:
| Client | How |
|---|---|
| Claude.ai | Settings > Connectors > Add custom connector > https://your-url/sse |
| Claude Desktop | Add to config: {"mcpServers":{"sprinklr":{"url":"http://localhost:3000/sse"}}} |
| Cursor / Others | Point to /sse (SSE) or /mcp (Streamable HTTP) |
Need Sprinklr API credentials? See Full Setup Guide below.
| Tool | Description |
|---|---|
sprinklr_report | Run any reporting dashboard query via API v2 payload |
sprinklr_search_cases | Search CARE tickets by text, case number, or status |
sprinklr_raw_api | GET any Sprinklr v2 endpoint (scoped by your token's permissions) |
sprinklr_me | Check authenticated user profile / verify connectivity |
sprinklr_token_status | Check connection status and tenant info |
Example: Open a Sprinklr dashboard > click three dots on a widget > "Generate API v2 Payload" > copy the JSON > ask your AI assistant: "Pull this reporting data: {paste payload}"
Deploy to any Node.js host (Render, Railway, Fly.io, AWS, on-prem). Set all env vars from .env and run npm start.
For Render free tier, set SERVER_URL to your Render URL --- the server self-pings every 14 minutes to prevent spin-down.
Cost model: You deploy, you authenticate, you pay for your own LLM subscription. Zero cost on Sprinklr's side.
Note: This server has no built-in auth --- deploy on a private network or behind a reverse proxy. See Security.
Each Sprinklr instance runs on a specific environment. Your API keys and tokens are tied to that environment and cannot be used across others.
sentry-environmentprod4) is your environmentCommon environments: prod, prod2, prod3, prod4, prod8.
Note: The prod environment has no path prefix in API URLs. All others include the environment name in the path.
https://www.google.com (or any URL you control)Alternatively, use the Developer Portal: register, go to Apps > + New App > fill in the form.
If you lose the Secret, you must generate a new pair.
The authorizing user needs Generate Token and Generate API v2 Payload permissions. These are managed in All Settings > Platform Setup > Governance Console > Workspace/Global Roles.
Open this URL in your browser (must be logged into Sprinklr):
https://api2.sprinklr.com/{ENV}/oauth/authorize?client_id={YOUR_API_KEY}&response_type=code&redirect_uri=https://www.google.com
For prod, omit {ENV}/. The redirect_uri must exactly match your app's Callback URL.
The browser redirects to https://www.google.com/?code=XXXXX. Copy the code value.
Codes expire in 10 minutes --- proceed immediately.
curl -s -X POST "https://api2.sprinklr.com/{ENV}/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id={YOUR_API_KEY}" \
-d "client_secret={YOUR_API_SECRET}" \
-d "code={YOUR_CODE}" \
-d "grant_type=authorization_code" \
-d "redirect_uri=https://www.google.com"
Returns access_token and refresh_token. Save both.
Alternative: Generate tokens directly from the Sprinklr UI via Developer Apps > Your App > Manage API Key/Token > Generate Token.
git clone https://github.com/daiict218/sprinklr-mcp.git
cd sprinklr-mcp
npm install
cp .env.example .env
Fill in your .env with values from the previous steps. See .env.example for the template.
npm test # verify Sprinklr connectivity
npm start # start the server on port 3000
Endpoints:
GET /sse + POST /messages (Claude.ai connectors)POST/GET/DELETE /mcpGET /health| Token | Expiry | Notes |
|---|---|---|
| Authorization code | 10 minutes | One-time use |
| Access token | ~30 days | Tied to environment |
| Refresh token | No expiry | Single-use --- each refresh invalidates the old one |
The server auto-refreshes on 401, but stores new tokens in memory only. If the server restarts, it re-reads from env vars. Update your env vars after a refresh, or re-run the OAuth flow if tokens go stale.
One token per API key. If multiple instances share an API key, one refreshing will invalidate the others. Use separate API keys per instance.
This MCP server is built entirely on top of Sprinklr's existing public REST APIs. It does not create any new access surface, bypass any Sprinklr access controls, or touch internal systems. Every request goes through Sprinklr's standard API gateway with the same authentication, authorization, and rate limiting that applies to any direct API consumer.
Because of this:
The intended deployment model keeps all sensitive data within the customer's own infrastructure:
Sprinklr publishes the open-source connector code. Customers deploy, authenticate, and run it themselves. Zero infrastructure or AI cost on Sprinklr's side.
This server does not authenticate incoming MCP client connections. Anyone who can reach the server URL can invoke all tools using the configured Sprinklr credentials. This is by design for simplicity --- the server is intended to run on private networks, localhost, or behind a reverse proxy with authentication.
Do not expose this server to the public internet without adding an authentication layer (e.g., reverse proxy with OAuth, VPN, or firewall rules).
/reports/query and /case/search./ and are validated against protocol injection (://) and path traversal (..). Requests always target the configured Sprinklr API domain..env is gitignored.sprinklr_raw_api scope: This tool allows GET requests to any Sprinklr v2 endpoint. Access is intentionally broad to support diverse use cases. The Sprinklr token's own permission scope limits what data is accessible.Tokens are stored in memory only. This is a deliberate design choice --- it avoids writing credentials to disk and keeps the attack surface minimal. The tradeoff: if the server restarts, it falls back to the tokens in your environment variables. Update your env vars after a refresh if needed, or re-run the OAuth flow.
See Token Lifecycle for details on expiry and single-use refresh tokens.
| Error | Cause | Fix |
|---|---|---|
| "Invalid APIKey/ClientID" (401) | API Key doesn't match environment | Verify key belongs to correct environment bundle |
| "Unauthorized" (401) | Access token expired | Server auto-refreshes, or re-run OAuth flow |
| "invalid_grant" | Auth code expired/used/redirect mismatch | Get a fresh code, exchange within 10 minutes |
| Refresh token fails | Already used (single-use) | Re-run full OAuth flow |
| "Developer Over Rate" (403) | Hit 1,000 calls/hour limit | Wait, or contact Sprinklr Success Manager |
Contributions are welcome. Please open an issue first to discuss what you'd like to change.
git checkout -b feature/your-feature)npm test && npm start)mainGuidelines:
main --- direct pushes are blockedAdding new read-only endpoints: Add the POST path to ALLOWED_POST_ENDPOINTS in server.mjs. GET endpoints work automatically via sprinklr_raw_api.
ISC
FAQs
Open-source MCP server for Sprinklr API
We found that sprinklr-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
The trojanized extensions use TinyGo-compiled WebAssembly and Solana transaction memos to resolve command-and-control infrastructure.

Security News
Anthropic says the directive cited national security concerns over a narrow jailbreak, but offered no specific technical details.

Security News
A network of 152 Chrome live wallpaper extensions hid ad tracking and made extension-driven traffic look like Google search clicks.