sunpeakBLOCK
Server-agnostic MCP testing framework and full-stack MCP App framework for ChatGPT Apps, Claude Connectors, and more.
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
Official documentation for sunpeak - The MCP Apps framework.
Local Development
Install the Mintlify CLI:
npm i -g mint
Start the dev server:
mint dev
View your local preview at http://localhost:3000.
Style Guide
Less is more, aim for brevity and clarity. Include simple examples, but only in places where an example makes a subject significantly clearer.
End sentences, descriptions, comments, etc. with a period, except where ending with a colon.
For icons on links, use the link icon for external resources, the page icon for a page on the documentation tab, and the code icon for a page on the API Reference tab.
Keep page names and file names in sync.
Follow the same general styles and page structures as other pages in the same group.
Contributing
We welcome your contributions!
Run mint dev from this directory to preview documentation changes locally.
Resources
0b7af9d476c9OBSERVED · 2026-10-12Connect
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. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add sunpeak-app --env SUNPEAK_ALLOW_HOSTED_OAUTH=${SUNPEAK_ALLOW_HOSTED_OAUTH} --env SUNPEAK_AUTH_FILE=${SUNPEAK_AUTH_FILE} --env SUNPEAK_INSECURE_FILE_KEY_STORE=${SUNPEAK_INSECURE_FILE_KEY_STORE} -- npx -y [email protected]{
"mcpServers": {
"sunpeak-app": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"SUNPEAK_ALLOW_HOSTED_OAUTH": "${SUNPEAK_ALLOW_HOSTED_OAUTH}",
"SUNPEAK_AUTH_FILE": "${SUNPEAK_AUTH_FILE}",
"SUNPEAK_INSECURE_FILE_KEY_STORE": "${SUNPEAK_INSECURE_FILE_KEY_STORE}"
}
}
}
}Exposed tools (1)
1 read · 0 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
get-selection | read | Get the current selection |
Trust audit
BLOCKgrade F · trust 47/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | FAIL |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (1 observation(s))
- Network
- declared (8 observation(s))
- Shell
- declared (9 observation(s))
- Dependencies
- not all pinned
- Secrets in source
- found
Findings (25)
new Function('module', 'exports', 'require', code)(mod, mod.exports, () => ({}));const fn = new Function(code + '\nreturn tool;');
tool = new Function('return ' + toolMatch[1])();new Function('module', 'exports', 'require', code)(mod, mod.exports, () => ({}));- Developer mode enabled from the bottom-left user menu under `Settings > Security and login > Developer mode`
const callbackUrl = `http://127.0.0.1:${callbackPort}/oauth/callback`;healthUrl: `http://127.0.0.1:${port}/health`,url: `http://127.0.0.1:${vitePort}/health`,'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAOdEVYdFNvZnR3YXJlAEZpZ21hnrGWYwAAA6BJREFUeAHtm09ME0EUxr+lqIDVlMQEI8aAaPRUmwgmeLEcTLx
const secret = 'sk-test-secret-that-must-not-render';
.prettierignore
.prettierignore
README.md
const fn = new Function('window', 'document', SUNPEAK_INLINE_HELPER_SCRIPT);vi.mock('../../components/button', () => ({vi.mock('../../components/icon', () => ({export { inspectServer } from '../../commands/inspect.mjs';import { ChatGPTPage, CHATGPT_SELECTORS, CHATGPT_URLS } from '../../bin/lib/live/chatgpt-page.mjs';const importUpgrade = () => import('../../bin/commands/upgrade.mjs');expect(_securityTestExports.isPrivateNetworkAddress('169.254.169.254')).toBe(true);_securityTestExports.assertHttpServerUrlAllowed('http://169.254.169.254/latest')await expect(guardedFetch('http://169.254.169.254/latest/meta-data')).rejects.toThrow(proxy_pass http://127.0.0.1:8000;
proxy_pass http://127.0.0.1:8000;
clsx, embla-carousel-react, embla-carousel-wheel-gestures, sunpeak, tailwind-merge, zod, @rolldown/pluginutils, @tailwindcss/vite
Gates applied: instruction_override, no_behavioural_pass.
0b7af9d476c9full audit observations/trust-audit/mcp-server/alignbase__sunpeak.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-12 | 0b7af9d476c9 | BLOCK | F | 47 | first audit |
Questions
What is the sunpeak MCP server?
Server-agnostic MCP testing framework and full-stack MCP App framework for ChatGPT Apps, Claude Connectors, and more.
What tools does sunpeak expose?
1 in total: 1 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is sunpeak safe to connect to an agent?
No — not without reading the findings first. The audit graded it F (47/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 sunpeak need?
It reads SUNPEAK_ALLOW_HOSTED_OAUTH, SUNPEAK_AUTH_FILE and SUNPEAK_INSECURE_FILE_KEY_STORE from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does sunpeak run?
It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as sunpeak-app at 0.1.0.
How current is this page?
The grade is for one exact copy of the source (0b7af9d476c9), read on 2026-10-12. The repository is watched and re-audited when it changes.