Atlas / MCP servers / polarvista / Xcode

XcodeBLOCK

mcp/polarvista/xcode
Verdict
BLOCK
Grade
F
Trust score
45 /100
Exposed tools
2 1r · 1w · 0d
Transport
sse · stdio
License
—
Stars
53
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

A Model Context Protocol server for building Xcode projects directly from LLM applications

The Xcode MCP Server provides a Model Context Protocol interface for building and testing Xcode projects. It enables AI assistants to directly trigger builds, run tests, monitor progress, and access logs through a standardized interface.

Features

  • Build Xcode projects with custom schemes and configurations
  • Run unit tests with granular control (run specific tests or skip tests)
  • Generate code coverage reports
  • Stream build and test logs in real-time
  • Access detailed build and test reports
  • JSON-formatted output
  • Automatic log persistence

Requirements

  • Node.js 16+
  • Xcode Command Line Tools
  • TypeScript
  • MCP-compatible client (e.g., Claude Desktop)

Installation

# Clone the repository
git clone https://github.com/PolarVista/Xcode-mcp-server.git
cd xcode-mcp-server

# Install dependencies
npm install

# Build the server
npm run build

Usage with Claude Desktop

  1. Start the server:
npm run start /path/to/build/logs/directory
  1. In Claude Desktop settings:
"command": "node",
"args": ["/path/to/the/xcode-mcp-server/build/index.js",
"/path/to/your/project/folder"],
"env": {
"PATH": "/usr/bin:/bin:/usr/local/bin:/usr/sbin:/sbin"
}

Available Tools

build_project

Builds an Xcode project with specified parameters.

Parameters:

  • projectPath (required): Path to the .xcodeproj or .xcworkspace
  • scheme (required): Build scheme name
  • configuration (optional): Build configuration (Debug/Release, defaults to Debug)
  • destination (optional): Build destination (defaults to "platform=iOS Simulator,name=iPhone 15 Pro")

Example usage in Claude:

build_project({
projectPath: "/path/to/Project.xcodeproj",
scheme: "MyApp",
configuration:
Read from source at commit da5c8dcb0676OBSERVED · 2026-10-08
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add xcode-mcp-server -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "xcode-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ]
    }
  }
}
03

Exposed tools (2)

1 read · 1 write · 0 destructive.

ToolRiskDescription
build_projectreadBuild an Xcode project
run_testswriteRun Xcode project tests with optional filtering
04

Trust audit

BLOCKgrade F · trust 45/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (5 observation(s))
Shell
declared (9 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/@types/node/sqlite.d.ts:81
exec(sql: string): void;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/depd/index.js:425
var deprecatedfn = new Function('fn', 'log', 'deprecate', 'message', 'site',
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/depd/index.js:427
'return function (' + args + ') {' +
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/typescript/lib/lib.es5.d.ts:998
exec(string: string): RegExpExecArray | null;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHSupply chain · supply.typosquat · CWE-829, CWE-1357
node_modules/iconv-lite/package.json
request ~ requests
Why it matters. dependency name one edit from a popular package
Fix. verify the package; likely typosquat
MEDIUMInventory / provenance · inv.binary · CWE-1104
.DS_Store
.DS_Store
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.symlink · CWE-1104
node_modules/.bin/tsc
node_modules/.bin/tsc
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
node_modules/.bin/tsserver
node_modules/.bin/tsserver
Why it matters. link not followed
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
node_modules/@types/node/url.d.ts:560
* console.log(myURL.password);
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
node_modules/iconv-lite/encodings/sbcs-data-generated.js:100
"chars": "€پ‚ƒ„...†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—کTMڑ›œں ،¢£¤¥¦§ ̈©ھ«¬® ̄°±23 ́μ¶· ̧1؛»1⁄41⁄23⁄4؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûüے"
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
node_modules/iconv-lite/encodings/sbcs-data-generated.js:373
"chars": "«»...“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาําิีึืฺุู–—฿เแโใไๅๆ็่้๊๋์ํTM๏๐๑๒๓๔๕๖๗๘๙®©����"
LOWInventory / provenance · inv.hidden_file · CWE-1104
.DS_Store
.DS_Store
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
node_modules/.package-lock.json
.package-lock.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
node_modules/@types/node/buffer.d.ts:1896
function atob(data: string): string;
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
node_modules/typescript/lib/lib.webworker.d.ts:8713
atob(data: string): string;
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
node_modules/typescript/lib/lib.webworker.d.ts:9525
declare function atob(data: string): string;
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
node_modules/@modelcontextprotocol/sdk/package.json
content-type, raw-body, zod, @eslint/js, @types/content-type, @types/eslint__js, @types/eventsource, @types/express
Why it matters. 20 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
node_modules/@types/node/package.json
undici-types
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
node_modules/iconv-lite/package.json
safer-buffer, async, c8, errto, iconv, mocha, request, semver
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
node_modules/inherits/package.json
tap
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
node_modules/safer-buffer/package.json
standard, tape
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOInventory / provenance · inv.oversize · CWE-1104
node_modules/@modelcontextprotocol/sdk/dist/types.d.ts
node_modules/@modelcontextprotocol/sdk/dist/types.d.ts
Why it matters. 1277222 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
node_modules/typescript/lib/_tsc.js
node_modules/typescript/lib/_tsc.js
Why it matters. 6150854 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
node_modules/typescript/lib/lib.dom.d.ts
node_modules/typescript/lib/lib.dom.d.ts
Why it matters. 1346247 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
node_modules/typescript/lib/typescript.js
node_modules/typescript/lib/typescript.js
Why it matters. 9043048 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha da5c8dcb0676full audit observations/trust-audit/mcp-server/polarvista__xcode.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-08da5c8dcb0676BLOCKF45first audit
06

Questions

What tools does Xcode expose?

2 in total: 1 read-only, 1 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is Xcode safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (45/100) and found 5 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does Xcode need?

No credential environment variables were found in its source, so it appears to need none.

How does Xcode run?

It speaks sse and stdio, so it runs as a local process your client starts. It is published on npm as xcode-mcp-server at 1.0.0.

How current is this page?

The grade is for one exact copy of the source (da5c8dcb0676), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement