Spectrum Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Spectrum Mcp (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.
A Model Context Protocol (MCP) server for Adobe Spectrum 2 UI components, designed to run on Cloudflare Workers. This server provides comprehensive access to Adobe's Spectrum 2 design system components with complete component coverage and lightning-fast performance.
🌐 Live Server: https://spectrum2-mcp-server.philipp-koch.workers.dev ✅ Status: Production Ready
✅ 90 Components Available - Complete coverage of all Spectrum 2 components ✅ Zero Dependencies - No external API calls, no rate limits, no failures ✅ Lightning Fast - Sub-100ms response times with global edge deployment ✅ Production Ready - Fully tested with real applications
list_all_componentsList all 71 available Spectrum 2 components, optionally filtered by category.
Parameters:
category (optional): Filter by category (e.g., "Actions", "Forms", "Navigation")Example:
curl -X POST https://spectrum2-mcp-server.philipp-koch.workers.dev \
-H "Content-Type: application/json" \
-d '{"method": "tools/call", "params": {"name": "list_all_components", "arguments": {"category": "Forms"}}}'get_componentGet detailed information about a specific component including props, examples, and descriptions.
Parameters:
name (required): Component name (e.g., "Button", "TextField", "Calendar")Example:
curl -X POST https://spectrum2-mcp-server.philipp-koch.workers.dev \
-H "Content-Type: application/json" \
-d '{"method": "tools/call", "params": {"name": "get_component", "arguments": {"name": "Button"}}}'search_componentsSearch for components by name, description, or category.
Parameters:
query (required): Search query stringExample:
curl -X POST https://spectrum2-mcp-server.philipp-koch.workers.dev \
-H "Content-Type: application/json" \
-d '{"method": "tools/call", "params": {"name": "search_components", "arguments": {"query": "calendar"}}}'The server is already deployed and ready to use:
# Test the live server
curl https://spectrum2-mcp-server.philipp-koch.workers.dev
# Get all components
curl -X POST https://spectrum2-mcp-server.philipp-koch.workers.dev \
-H "Content-Type: application/json" \
-d '{"method": "tools/call", "params": {"name": "list_all_components", "arguments": {}}}'# Clone and deploy
git clone <this-repo>
cd spectrum2-mcp-server
npm install
npx wrangler login
npx wrangler deploy src/single-worker.ts --name your-spectrum-serverThis MCP server is designed for Spectrum 2 (@react-spectrum/s2), not the older Spectrum 1 package:
# ✅ Correct - Use Spectrum 2
npm install @react-spectrum/s2
# ❌ Wrong - Don't use Spectrum 1
npm install @adobe/react-spectrumimport { Provider, Button, TextField, Card } from '@react-spectrum/s2';
function App() {
return (
<Provider theme="light">
<Card>
<TextField label="Name" />
<Button variant="accent">Submit</Button>
</Card>
</Provider>
);
}All components returned by the MCP server are available in @react-spectrum/s2 and work exactly as documented.
Add to your MCP client configuration:
{
"mcpServers": {
"spectrum2": {
"command": "node",
"args": ["-e", "console.log('Use HTTP endpoint instead')"],
"env": {
"MCP_SERVER_URL": "https://spectrum2-mcp-server.philipp-koch.workers.dev"
}
}
}
}// Direct HTTP calls to the MCP server
const response = await fetch('https://spectrum2-mcp-server.philipp-koch.workers.dev', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
method: 'tools/call',
params: {
name: 'get_component',
arguments: { name: 'Button' }
}
})
});
const result = await response.json();
const componentData = JSON.parse(result.content[0].text);Your deployed server supports both HTTP requests and MCP protocol:
Health Check:
GET https://your-worker-url.workers.devList Available Tools:
POST https://your-worker-url.workers.dev
Content-Type: application/json
{"method": "tools/list"}Call a Tool:
POST https://spectrum2-mcp-server.philipp-koch.workers.dev
Content-Type: application/json
{
"method": "tools/call",
"params": {
"name": "search_components",
"arguments": {"query": "button"}
}
}Add to your MCP client configuration:
For HTTP-based MCP clients:
{
"mcpServers": {
"spectrum2": {
"url": "https://your-worker-url.workers.dev",
"type": "http"
}
}
}For stdio-based MCP clients (local development):
{
"mcpServers": {
"spectrum2": {
"command": "node",
"args": ["dist/index.js"],
"cwd": "/path/to/spectrum2-mcp-server"
}
}
}Health Check Response:
{
"name": "spectrum2-mcp-server",
"version": "1.0.0",
"status": "healthy",
"totalComponents": 90,
"categories": ["Actions", "Collections", "Content", "Forms", "Layout", "Navigation", "Overlays", "Status"],
"lastUpdated": "2025-07-31T13:53:33.061Z"
}Component Details Response:
{
"content": [{
"type": "text",
"text": "{\"name\": \"Button\", \"category\": \"Actions\", \"description\": \"Buttons allow users to perform an action or to navigate to another page.\", \"props\": [{\"name\": \"variant\", \"type\": \"'accent' | 'primary' | 'secondary' | 'negative'\", \"required\": false, \"description\": \"The visual style of the button\"}], \"examples\": [{\"title\": \"Primary Button\", \"code\": \"<Button variant=\\\"accent\\\">Get Started</Button>\"}]}"
}]
}The server uses a static data architecture for maximum reliability:
@react-spectrum/s2| Category | Count | Key Components |
|---|---|---|
| Actions | 13 | Button, ActionButton, ToggleButton, Toolbar |
| Forms | 32 | TextField, NumberField, Calendar, ColorArea, Form |
| Collections | 7 | Table, Menu, ListBox, TreeView, TagGroup |
| Overlays | 10 | Dialog, Modal, Tooltip, Popover, AlertDialog |
| Content | 8 | Text, Heading, Avatar, Icon, Image |
| Status | 10 | ProgressBar, Badge, Toast, Skeleton, StatusLight |
| Navigation | 4 | Link, Tabs, Breadcrumbs, TabsPicker |
| Layout | 6 | Card, Divider, Provider, Content, Accordion |
"KV namespace not found" error:
wrangler.toml to deploy without cachingDeployment errors:
npx wrangler loginTool not found errors:
list_all_components, get_component, search_componentsRun the comprehensive test suite to verify all functionality:
node test-mcp.jsLatest Test Results (July 28, 2025):
Test individual endpoints:
# Test health endpoint
curl https://spectrum2-mcp-server.philipp-koch.workers.dev
# Test MCP tools list
curl -X POST https://spectrum2-mcp-server.philipp-koch.workers.dev \
-H "Content-Type: application/json" \
-d '{"method": "tools/list"}'
# Test component search
curl -X POST https://spectrum2-mcp-server.philipp-koch.workers.dev \
-H "Content-Type: application/json" \
-d '{"method": "tools/call", "params": {"name": "search_components", "arguments": {"query": "icon"}}}'src/data-sources/DataSource interfaceDataSourceManager.initializeDataSources()GitHubSpectrumParser for better component detection# Local development
npx wrangler dev
# Test changes
curl -X POST http://localhost:8787 -H "Content-Type: application/json" -d '{"method": "tools/list"}'
# Deploy
npx wrangler deployMIT License - see LICENSE file for details.
✅ Live & Production Ready
# Health check
curl https://spectrum2-mcp-server.philipp-koch.workers.dev
# → {"totalComponents":90,"status":"healthy"}
# Component count
curl -X POST ... | jq '.total'
# → 90
# Critical components verified
curl -X POST ... -d '{"method":"tools/call","params":{"name":"get_component","arguments":{"name":"Icon"}}}'
# → ✅ Available
curl -X POST ... -d '{"method":"tools/call","params":{"name":"get_component","arguments":{"name":"Provider"}}}'
# → ✅ Available
curl -X POST ... -d '{"method":"tools/call","params":{"name":"get_component","arguments":{"name":"Modal"}}}'
# → ✅ AvailableThe server has been tested with actual Spectrum 2 applications:
✅ Working Components: Button, TextField, Checkbox, Heading, Text, Divider, Card, Form, Modal, Icon, Provider ✅ Correct Props: All props match the actual @react-spectrum/s2 package ✅ Package Compatibility: Designed specifically for @react-spectrum/s2 (not the older @adobe/react-spectrum)
If you find components that don't match the actual @react-spectrum/s2 package:
@react-spectrum/s2 (not @adobe/react-spectrum)To add new Spectrum 2 components:
src/static-components.ts with component datanpx wrangler deploy src/single-worker.tsTest your changes with real Spectrum 2 applications to ensure accuracy.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.