neuron-explorer
Qwen3.5‑4B 전용 조향형 뉴런 탐색기, 모든 MLP 뉴런을 밀어 결과를 보관·탐색
macOS 메뉴바 앱으로 모든 MCP 서버 상태를 확인하고, 주의가 필요한 서버를 알려줍니다 설정을 로컬에서만 읽고 데이터를 전송하지 않습니다
A macOS menu bar app that checks every MCP server your AI agents use, and tells you which ones need attention. Reads your configs locally; never sends data anywhere.
개발 도구Swift · ShellGitHub @aka-kika온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
A small Mac menu bar app that checks every MCP server your AI agents use: broken, slow, waiting for a sign-in, or set up differently.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A small Mac menu bar app that checks every MCP server your AI agents use, and
tells you which ones are broken, slow, waiting for a sign-in, or set up
differently from one agent to the next.
MCP (Model Context Protocol) servers are the small programs that give agents
like Claude Code, Cursor or Codex their extra tools. mcpock finds them in your
agents' config files, starts each one the way the agent would, and checks that
it answers.README 전문 보기 ↗A small Mac menu bar app that checks every MCP server your AI agents use, and tells you which ones are broken, slow, waiting for a sign-in, or set up differently from one agent to the next.
MCP (Model Context Protocol) servers are the small programs that give agents like Claude Code, Cursor or Codex their extra tools. mcpock finds them in your agents' config files, starts each one the way the agent would, and checks that it answers.
When you use more than one agent, the same MCP server ends up in five config files, each written a little differently. One day a tool quietly stops working in one agent and not the others, and you only notice when a task fails halfway. The agent rarely says why.
mcpock gives you one place to look. It never changes your configs: it reads them, checks every server, and shows you what needs attention and why, so you (or your agent) can fix it.
~/.gemini/config/mcp_config.json.Full notes: 1.12.0, 1.12.1, 1.12.2.
Finds your servers automatically. It knows the config files of the common agents and also scans the usual config folders for anything written in a standard MCP format. The same server in several agents shows as one row.
Checks each one. It starts a local server (or calls a remote one), does the MCP handshake, asks for its tool list, then closes it. Every 15 minutes by default (1 minute to 4 hours, or only when you click Refresh). Each round reads the config files it already knows again, so changed servers show up; a config file in a new place is found at launch or when you click Refresh. A server that is already fine keeps its tool list between rounds; Refresh and Check again ask for it anew.
Shows health as a shape, not only a colour:
| Shape | Means |
|---|---|
| Filled dot (green) | Fine: it started and listed its tools |
| Ring (amber) | Slow (no answer in 20 s, tried twice; 10 s for a remote server) or needs sign-in (HTTP 401/403) |
| Ring (grey) | Still checking |
| Diamond (red) | Broken: could not start, quit on start, or refused the handshake |
| Dash (grey) | Paused by you, or runs inside its own app and can't be checked from outside, or Needs Wake open: it belongs to a Mac app that is closed (not broken; it is checked again as soon as the app opens) |
Spots servers set up differently. When one agent launches a different
command or address than the others (often an old path), the row says so, and
Compare shows each agent's version side by side. The same runtime in
another folder (npx here, an agent's own ~/.agent/node/bin/npx there) is not a
difference. If the agents are
meant to differ, choose Mark as intended on the card (or Mark as
Intended in the right-click menu).
Problems first. The list starts with Needs you, then your pinned servers, then everything else. One toggle in the footer shows only problems.
Agents tab. The panel opens here: one row per agent with a small health bar that grows in after each check. Open an agent to see its servers (the first 5, +N more for the rest; servers that need you always show) and its config file. With the problems toggle on, agents with nothing wrong stay listed below, faded.
Next to each server under an agent: how many times that agent called it in the last 7 days, 30 days or all time (Settings > General > Usage, or Off). Read from the agent's own history on your Mac: Claude Code, Grok, Cursor and Hermes today. A dash means that agent keeps no record mcpock can read yet. The panel says so once, with a Turn Off.
mcpock.dmg from the Releases page.Needs macOS 26 or later on Apple Silicon.
First launch, good to know:
mcpock includes mcpock-mcp, a small MCP server your agents can call. It only
reads the status file mcpock writes after each check
(~/Library/Application Support/mcpock/status.json); it never starts a server
and never changes anything.
The easy way: Settings > Connect > Copy for Claude, then paste into
Claude Code. The prompt walks Claude through finding your agent configs,
backing each one up, adding mcpock where it's missing (in each file's own
format) and testing it.
By hand: Settings > Connect lists your agents and shows which ones already have mcpock (Connected, Not connected, Not on this Mac), with a copy button per agent for the right line. mcpock only reads these files; you or your agent paste the line. For Claude Code:
claude mcp add --scope user mcpock -- /Applications/mcpock.app/Contents/Helpers/mcpock-mcp
For agents that use mcpServers JSON (Claude Desktop, Cursor, Windsurf, Cline
and most others):
{
"mcpServers": {
"mcpock": {
"command": "/Applications/mcpock.app/Contents/Helpers/mcpock-mcp",
"args": []
}
}
}
Then ask your agent to "check my mcpock". The tools it gets:
| Tool | Answers |
|---|---|
mcpock_status | Counts: how many servers are fine, broken, slow, need a sign-in or are set up differently, and when mcpock last checked |
mcpock_problems | Every server that needs attention, with the reason, the agents and the config files involved |
mcpock_server | Everything about one server, by name |
All three are read-only. Secrets are masked (see below). If mcpock isn't running, hasn't checked yet, or its results are old, the answer says so.
Try it from Terminal:
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"check","version":"1"}}}' \
'{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
| /Applications/mcpock.app/Contents/Helpers/mcpock-mcp
mcpock reads these files directly. Anything else that writes one of the
standard formats (JSON mcpServers, servers or mcp; TOML
[mcp_servers.*]; YAML extensions: or mcp_servers:) in ~/.config,
~/Library/Application Support or a hidden folder in your home folder is found
by the scan, with no code change. A server from a file only the scan found shows
Paused until you choose Resume once (right-click the row): mcpock never
starts a command from a file no agent it knows reads without your OK.
| Agent | Config file | Format |
|---|---|---|
| Claude Code | ~/.claude.json (global and per-project servers), and .mcp.json files the scan finds, but only inside ~/.config, ~/Library/Application Support or a hidden folder in your home folder, not in ordinary project folders (only the servers you approved in Claude Code) | JSON |
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json | JSON |
| Cursor | ~/.cursor/mcp.json | JSON |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | JSON |
| Antigravity | ~/.gemini/config/mcp_config.json | JSON |
| Cline | ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json | JSON |
| Continue | ~/.continue/config.json | JSON |
| VS Code | ~/Library/Application Support/Code/User/mcp.json (servers) | JSON |
| Codex | ~/.codex/config.toml | TOML |
| Grok | ~/.grok/config.toml | TOML |
| Grok Bot | ~/.grokbot/settings.json (mcpBoxServers, names only) | Settings |
| Goose | ~/.config/goose/config.yaml (extensions:) | YAML |
| Hermes | ~/.hermes/config.yaml (mcp_servers:) | YAML |
| Kimi Code | ~/.kimi-code/mcp.json | JSON |
| MiniMax | ~/.minimax/mcp.json | JSON |
| OpenCode | ~/.config/opencode/opencode.json (mcp) | JSON |
| aka | Asked from aka's local helper (127.0.0.1:6464) while aka runs | API |
| Tinycast |
Notes: servers turned off with enabled: false are skipped. ${VAR},
${env:VAR} and ${workspaceFolder} are filled in before a check, from
mcpock's own environment and the project folder; a server that needs one
mcpock can't fill (like ${input:...}) reads Not checked. Servers marked
"builtin": true (they run inside their own app) are shown
but never started. aka keeps its servers in its own database, so mcpock
asks aka's local helper for the list (only when aka itself is the program on
that port) and starts each server the way aka does;
because aka launches servers its own way, it never counts toward "set up
differently". If aka asks for access before listing its servers (a newer aka
wants a token mcpock does not have yet), aka shows as Needs access. Tinycast keeps its servers in its own settings and their
keys and sign-ins in its own Keychain items, which mcpock never reads: a
Tinycast server that needs one shows as managed by its app, the others are
checked like any other. Grok Bot keeps its servers in your xAI account
and runs them in xAI's cloud; its settings file holds only their names, so
mcpock lists them under Grok Bot and never starts them. Grok Bot is listed
once installed (its app or ~/.grokbot), with "No servers yet" while its list
is empty. A remote server
written as serverUrl (Antigravity, Windsurf) is read like url. Thirty-one agents have their real logo in the app (Grok Bot since 1.12.2); others show two
letters.
http:// too. A
server whose config sends keys over plain http:// to another machine
gets a warning on its card: anyone on that network can read those keys.~/Library/Application Support/mcpock/usage.json, plus, for each history file, the time of the
newest call it counted (so a rewritten file is never counted twice).
Never a message, an argument or a result.
Settings > General > Usage > Off stops the reading.~/.claude/sessions/*.json (which sessions run, and
in which folder) and those sessions' lines in Claude Code's own MCP logs
(~/Library/Caches/claude-cli-nodejs), looking only at connect and failure
lines. Nothing is kept or sent.You need macOS 26+, Xcode 26+ and XcodeGen
(brew install xcodegen).
git clone https://github.com/aka-kika/mcpock.git
cd mcpock
xcodegen generate
xcodebuild -scheme mcpock -configuration Debug \
-derivedDataPath build \
-destination 'platform=macOS,arch=arm64' build
open build/Build/Products/Debug/mcpock.app
Debug builds sign with an Apple Development identity (team in project.yml),
which keeps macOS folder permissions across rebuilds. Without that certificate,
add CODE_SIGN_IDENTITY=- CODE_SIGNING_REQUIRED=NO to the xcodebuild line
(that is what CI does).
./scripts/ci.sh # xcodegen generate + build + test, same as GitHub Actions
811 unit tests at v1.12.2. They cover the probes against real child processes and a real local HTTP server, process cleanup, every config format, discovery and the scan's safety rules, grouping, "set up differently", secret masking, the status file and the helper's answers, and the panel's wording and layout.
AgentRegistry (known paths) plus ConfigScanner (a shallow,
size-capped scan of the usual config folders) plus AkaSource. A file counts
only when it has at least one server with a command or a url, which keeps
unrelated JSON out. TOML and YAML are read by small built-in parsers.HealthMonitor probes every server in parallel off the main
thread. stdio servers get newline-delimited JSON-RPC (initialize,
tools/list) and are then stopped along with their child processes. HTTP
servers get the same over streamable HTTP (session id replayed) or legacy SSE.
Identical setups are probed once. A single timeout shows as slow, a second one
or a hard failure as broken, and failing servers back off to hourly checks.MenuBarExtra panel of fixed size, with the detail card and tools
window as child panels beside it that never take focus.status.json and status.md;
the bundled mcpock-mcp (stdio, read-only) answers from that file.The full module map, the flow of one refresh, and the rules that must not regress are in docs/ARCHITECTURE.md.
mcpock/ The app
MCPockApp.swift Entry point: the menu bar item and panel
Models/ Server config, health, groups
Services/ Discovery, probes, process runner, texts, status file
Theme/ Colours, fonts, appearance
Views/ Panel, rows, detail card, Agents tab, Settings
Assets.xcassets/ App icon, agent logos, About links
mcpock-mcp/ The read-only MCP helper (main.swift)
Shared/ Code compiled into both app and helper
mcpockTests/ Unit tests
project.yml XcodeGen spec (source of truth for the Xcode project)
scripts/ci.sh Local CI: generate, build, test
scripts/release.sh Release build, Developer ID signing, notarized DMG
scripts/appcast.sh Sparkle's signed update feed (appcast.xml) from a folder of release DMGs
docs/ Architecture, release notes, third-party credits
If it writes a standard format into a scanned folder, it already works. Add a
row to AgentRegistry.known for a clean name or a path outside the scan; add a
ConfigShape and a parser for a new format; add a logo as an
agent-<name>.imageset plus a logoNames entry. Details in
docs/ARCHITECTURE.md §7.
scripts/release.sh builds Release, signs with a Developer ID identity and
hardened runtime, notarizes and staples the app and the DMG, and writes
dist/mcpock.dmg. One-time setup, storing an app-specific password in your
keychain:
xcrun notarytool store-credentials my-notary \
--apple-id "[email protected]" --team-id <TEAMID> \
--password "<app-specific password from appleid.apple.com>"
MCPOCK_NOTARY_PROFILE=my-notary MCPOCK_SIGN_IDENTITY=<identity hash> ./scripts/release.sh
You can put the two variables in scripts/release.env (git-ignored, see
scripts/release.env.example) instead. Without them the script stops with an
error. It also stops if docs/release-notes/<version>.md is missing, if the
tests (scripts/ci.sh) fail, or if Gatekeeper rejects the app.
mcpock entry you added in
Connect your agents (mcpock never edits your configs, so it did not add
one for you).mcpock.app from Applications.~/Library/Application Support/mcpock (the status and usage files)~/Library/Preferences/com.mcpock.app.plist (your settings)~/Library/Group Containers/P5RB3W3D58.com.mcpock (shared with the widgets)macOS asks for permission to open a folder. One of your servers runs from Documents, Desktop or Downloads, and mcpock has to start it there. Allow it once; it sticks. mcpock's own scan never looks in those folders.
A server shows broken. What now?
Click it. The card shows the real error: "command not found" (the program isn't
installed, or isn't on the PATH mcpock uses: it adds /opt/homebrew/bin,
/usr/local/bin and ~/.local/bin; use a full path in the config if needed),
"quit on start" with the server's own error text (often a missing API key), or
no answer in time (20 seconds for a local server, tried twice; 10 seconds for
a remote one). Copy the error, fix it in the agent's config, then
Check again.
It says "Needs sign-in". The server answered with HTTP 401 or 403 although its config sends a token header: the token is likely wrong or expired. Fix the header in the config. mcpock never signs in for you, so this state doesn't turn red.
It says "Signed in by the agent". The server answered with HTTP 401 or 403 and its config has no token header: you signed in inside the agent (OAuth), and the agent keeps that sign-in to itself. Nothing is wrong, mcpock just can't check this server. It shows a calm dash and stays out of Needs you.
What does "set up differently" mean? The same server name launches a different command, script or address in one agent than in the others. Sometimes that's intended; often it is an old path. Compare on the card shows each version (secret values hidden).
If it's intended (say each agent has its own key and its own small launcher script), click Mark as intended in the card's yellow box, or right-click the row and choose Mark as Intended. The row stops counting as a problem, but mcpock keeps checking it and still shows real errors. mcpock remembers how the agents were set up at that moment (a short fingerprint of each command or address, never keys or env values), agent by agent. If an agent's setup changes later, or a new agent sets it up another way, the note comes back on its own for that agent; an agent you remove keeps the mark quiet. The card then shows a quiet "Marked as intended" line; Undo there, or Unmark as Intended in the right-click menu, takes it back.
A login page or an app opens every time mcpock checks. Starting that server has a side effect. Right-click it and choose Pause: mcpock won't start it again until you resume it.
The grey dash?
Either you paused the server, or it runs inside its own app (marked
"builtin": true) and can't be checked from outside. Neither
counts as a problem.
I added a server and it doesn't show. Click Refresh in the footer: it looks for configs again and checks everything. The timer reads the configs again every round too, so the new server also shows up on its own at the next round.
My agent says mcpock isn't running or hasn't checked yet. Make sure mcpock is running (start it from Applications if its icon isn't in the menu bar). It starts checking at launch and writes the status file once the first check is done, then ask again.
Hidden servers? Still checked, just not listed. A hidden server that breaks comes back to the panel until it works again. Change it in Settings > Servers.
mcpock's interface was shaped by studying these open-source Mac apps, found and kept with reshelf (site), the author's app for collecting repos. Thank you to their authors:
In-app updates run on Sparkle (MIT), mcpock's one code dependency.
Agent logos come from LobeHub Icons (MIT) and, for Zed, Warp, JetBrains and Raycast, Simple Icons (CC0). They are trademarks of their owners; mcpock is not affiliated with or endorsed by any of them. Details and license texts: docs/THIRD-PARTY.md.
Issues and pull requests are welcome. See CONTRIBUTING.md.
MIT. See LICENSE.
Made by Kika · akakika.com · X @akakikaaa · GitHub aka-kika
Detail card. Click a row: the full error (with Ask an agent and Copy errors), which agents use the server and where their config lives, its tools (name and short description; +N more lists them all), and Check again, Pin and Hide. While a server is re-checked, its row shows a small spinning mark.
Lost in a session. When a server drops inside a Claude Code session that is still open (a short network blip), its row says "Lost in 1 open Claude Code session: run /mcp there", even while mcpock's own check reaches it. Read from Claude Code's own session and server logs on your Mac.
Quiet menu bar icon. Plain when all is fine, a small ring when something is slow or needs a look, a small diamond when something is broken. No numbers, no blinking, no notifications.
Keyboard friendly. Control-Option-M opens and closes the panel from any app (pick your own keys, or turn it off, in Settings > General). Arrow keys move (on the Agents tab, Right and Left open and close an agent), Return opens the card, Escape closes, Cmd-F searches servers, agents and tool names, Cmd-R checks the selected row again (or every server), Cmd-C copies the selected row's error (or its details).
Desktop widgets. Status (small), Problems (up to four servers that need you) and Agents (up to five agents, the ones that need you first), both medium: right-click the desktop, Edit Widgets…, search mcpock. They update after each check.
Glass theme. Apple's Liquid Glass for the panel, the card and Settings, following light/dark and your Clear/Tinted setting. On macOS 27 the panel is its own see-through window, so the glass shows your real desktop.
Settings: appearance (System, Dark, Light, Glass), how often to check, Open at Login, pin / show / hide each server, the list of agents found, export of all errors (Markdown or JSON), and Connect for your agents.
Lets your agents ask it. A small read-only MCP server ships inside the app, so you can say "check my mcpock" to an agent instead of pasting errors.
~/Library/Preferences/com.tinycast.app.plist (mcpServers) |
| Settings |