Skip to content
Merged
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
29 changes: 29 additions & 0 deletions .cursor-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"name": "parseable",
"displayName": "Parseable",
"version": "0.2.14",
"description": "Query and manage Parseable logs, metrics, datasets, and alerts from Cursor.",
"author": {
"name": "Parseable"
},
"publisher": "Parseable",
"homepage": "https://www.parseable.com",
"repository": "https://github.com/parseablehq/parseable-mcp-server",
"license": "Apache-2.0",
"logo": "assets/logo.svg",
"keywords": [
"parseable",
"observability",
"logs",
"metrics",
"alerts",
"mcp"
],
"category": "developer-tools",
"tags": [
"observability",
"monitoring",
"mcp"
],
"mcpServers": "./mcp.json"
}
29 changes: 29 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,35 @@ npx -y @parseable/parseable-mcp-server init \

Supported `--client` values: `claude-desktop`, `cursor`.

### Cursor Marketplace plugin

The repository also contains a native Cursor plugin manifest. Marketplace installs connect to `https://mcp.parseable.com/mcp` and read credentials from the environment.

Set these variables before starting Cursor:

```bash
export PARSEABLE_URL="https://your-parseable.example.com"
export PARSEABLE_API_KEY="your-api-key"
export PARSEABLE_MODE="self-hosted"
```

`PARSEABLE_API_KEY` and `PARSEABLE_MODE` are required by the Cursor plugin. Use `PARSEABLE_MODE=cloud` and omit `PARSEABLE_URL` for Parseable Cloud. Use `PARSEABLE_MODE=self-hosted` with `PARSEABLE_URL` for self-hosted Parseable.

```bash
# Parseable Cloud
export PARSEABLE_MODE="cloud"
export PARSEABLE_API_KEY="your-cloud-api-key"
unset PARSEABLE_URL
```

Then install the Parseable plugin from the Cursor Marketplace. If Cursor was opened from the macOS dock or another GUI launcher that does not inherit shell variables, use the interactive setup instead:

```bash
npx -y @parseable/parseable-mcp-server init --client cursor
```

Plugin metadata lives in `.cursor-plugin/plugin.json`; its MCP connection configuration lives in `mcp.json`. Keep the plugin version aligned with the npm package version when releasing.

---

## Quickstart — HTTP (hosted)
Expand Down
7 changes: 7 additions & 0 deletions assets/logo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 13 additions & 0 deletions mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"mcpServers": {
"parseable": {
"type": "http",
"url": "https://mcp.parseable.com/mcp",
"headers": {
"X-API-Key": "${env:PARSEABLE_API_KEY}",
"X-Parseable-Mode": "${env:PARSEABLE_MODE}",
"X-Parseable-URL": "${env:PARSEABLE_URL}"
}
}
}
}
6 changes: 6 additions & 0 deletions test/auth.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,12 @@ describe("parseRequestAuth", () => {
);
});

it("requires URL when self-hosted mode is explicit", () => {
expect(() =>
parseRequestAuth({ "x-parseable-mode": "self-hosted", "x-api-key": "secret" }),
).toThrow(/X-Parseable-URL/);
});

it("rejects unknown mode", () => {
expect(() => parseRequestAuth({ ...goodHeaders, "x-parseable-mode": "enterprise" })).toThrow(
/cloud or self-hosted/,
Expand Down
Loading