devicecloud-mcp
Advanced tools
| import assert from "node:assert/strict"; | ||
| import { readFileSync } from "node:fs"; | ||
| import { resolve } from "node:path"; | ||
| import { test } from "node:test"; | ||
| import { Client } from "@modelcontextprotocol/sdk/client/index.js"; | ||
| import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; | ||
| test("the built server initializes and lists its tools", async () => { | ||
| const packageJson = JSON.parse(readFileSync(resolve("package.json"), "utf8")); | ||
| const transport = new StdioClientTransport({ | ||
| command: process.execPath, | ||
| args: [resolve("dist/index.js")], | ||
| env: { DEVICE_CLOUD_API_KEY: "startup-test-key" }, | ||
| stderr: "pipe", | ||
| }); | ||
| const client = new Client({ name: "startup-test", version: "1.0.0" }); | ||
| try { | ||
| await client.connect(transport); | ||
| assert.equal(client.getServerVersion()?.version, packageJson.version); | ||
| const { tools } = await client.listTools(); | ||
| assert.deepEqual(tools.map(({ name }) => name).sort(), [ | ||
| "diagnose_run", | ||
| "download_artifacts", | ||
| "get_flow_runs", | ||
| "get_html_report", | ||
| "get_junit_report", | ||
| "get_results", | ||
| "get_upload_status", | ||
| "list_flow_analytics", | ||
| "list_uploads", | ||
| "suite_health", | ||
| ]); | ||
| } | ||
| finally { | ||
| await client.close(); | ||
| } | ||
| }); |
+3
-1
@@ -6,2 +6,3 @@ #!/usr/bin/env node | ||
| import { spawn } from "node:child_process"; | ||
| import { readFileSync } from "node:fs"; | ||
| import { mkdir, readdir, writeFile } from "node:fs/promises"; | ||
@@ -12,2 +13,3 @@ import { join, resolve as resolvePath } from "node:path"; | ||
| const API_KEY = process.env.DEVICE_CLOUD_API_KEY; | ||
| const { version } = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8")); | ||
| if (!API_KEY) { | ||
@@ -418,3 +420,3 @@ console.error("[devicecloud-mcp] DEVICE_CLOUD_API_KEY env var is required"); | ||
| ]; | ||
| const server = new Server({ name: "devicecloud-mcp", version: "0.1.3" }, { capabilities: { tools: {} } }); | ||
| const server = new Server({ name: "devicecloud-mcp", version }, { capabilities: { tools: {} } }); | ||
| server.setRequestHandler(ListToolsRequestSchema, async () => ({ | ||
@@ -421,0 +423,0 @@ tools: tools.map(({ name, description, inputSchema }) => ({ name, description, inputSchema })), |
+4
-5
| { | ||
| "name": "devicecloud-mcp", | ||
| "version": "0.3.1", | ||
| "version": "0.3.2", | ||
| "mcpName": "io.github.RubenGlez/devicecloud", | ||
@@ -18,3 +18,2 @@ "description": "Triage failing DeviceCloud Maestro test runs from your AI assistant — fail reasons, failure screenshots, and flaky-flow analytics, without opening the web console", | ||
| }, | ||
| "homepage": "https://rubenglez.dev/devicecloud-mcp", | ||
| "bugs": { | ||
@@ -26,3 +25,3 @@ "url": "https://github.com/RubenGlez/devicecloud-mcp/issues" | ||
| "engines": { | ||
| "node": ">=24" | ||
| "node": ">=22" | ||
| }, | ||
@@ -36,3 +35,3 @@ "files": [ | ||
| "dependencies": { | ||
| "@modelcontextprotocol/sdk": "^1.29.0" | ||
| "@modelcontextprotocol/sdk": "1.29.0" | ||
| }, | ||
@@ -48,3 +47,3 @@ "devDependencies": { | ||
| "dev": "tsx src/index.ts", | ||
| "test": "node --import tsx/esm --test src/index.test.ts", | ||
| "test": "pnpm build && node --import tsx/esm --test src/*.test.ts", | ||
| "release": "node scripts/release.mjs", | ||
@@ -51,0 +50,0 @@ "release:minor": "node scripts/release.mjs minor", |
+1
-3
@@ -7,4 +7,2 @@ # devicecloud-mcp | ||
| **Project page:** [rubenglez.dev/devicecloud-mcp](https://rubenglez.dev/devicecloud-mcp) | ||
| When a [DeviceCloud](https://console.devicecloud.dev) run goes red in CI, the reason why is buried in the web dashboard: the fail reason, the failure screenshot, the logs. This server pulls all of it straight into your editor, so your AI assistant (Claude Code, Cursor, Claude Desktop, etc.) can read the evidence, find the root cause, and fix the flow or app code. You commit, CI re-runs, and the dashboard stays closed. | ||
@@ -30,3 +28,3 @@ | ||
| **Requires Node.js 24+** — check with `node --version`. There's no separate install step; the server runs on demand via `npx`. | ||
| **Requires Node.js 22+** — check with `node --version`. There's no separate install step; the server runs on demand via `npx`. | ||
@@ -33,0 +31,0 @@ Add this to your MCP client config: |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
No website
QualityPackage does not have a website.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
49249
2.85%7
16.67%814
4.9%2
100%155
-1.27%7
40%+ Added
+ Added
- Removed
- Removed