LocalAnt
Provides tools for Android ADB automation, including device listing, screenshot, tap, swipe, input text, logcat, and APK installation.
Allows publishing private Qiita articles using the official API with a QIITA_TOKEN secret.
Allows writing Zenn articles as local markdown files with published:false, and can open a PR branch for publication.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@LocalAntRun health check on my local app"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
LocalAnt
Use ChatGPT as the brain. Use your local computer as the hands.
LocalAnt lets you use ChatGPT as the brain and your local computer as the hands.
It exposes safe, permissioned local skills to ChatGPT through MCP: run approved commands, inspect projects, manage files, call coding agents like Claude Code or Codex, control browser/ADB, publish articles, and create your own local skills — all behind a default-deny security model with local approval and full audit logging.
ChatGPT
↓ Apps SDK / MCP Connector (Streamable HTTP /mcp)
LocalAnt ── Gateway · Risk engine · Approval queue · Audit log · Dashboard
↓ Local PC
├─ Shell (allowlisted) · Filesystem (allowlisted) · Git
├─ Claude Code / Codex (plan → approve → execute → validate → diff)
├─ Browser (Playwright, isolated profile) · Android (ADB)
├─ Articles (Zenn / Qiita / note) · Custom Skills
└─ Adapters: OpenClaw · Desktop Commander · any MCP serverWhat is LocalAnt?
A local-first MCP Gateway for ChatGPT. ChatGPT is the conversational UI and decision-maker; your PC is the execution environment. The gateway publishes a catalog of 140+ permissioned tools over the Model Context Protocol, which ChatGPT's Developer-Mode connectors can call.
The design is inspired by OpenClaw (local gateway + skills + registry),
Desktop Commander (local PC control + audit + hardening), supergateway
(stdio→Streamable-HTTP /mcp), and mcp-proxy (bundling MCP servers) — but the
brain is ChatGPT, and every capability is wrapped in permissions, approval,
and audit.
Related MCP server: EdgeBox
Why ChatGPT as brain, local PC as hands?
ChatGPT is great at reasoning, planning, and conversation.
Your PC is where your code, files, devices, and tools actually live.
Handing ChatGPT a raw shell is dangerous. Instead, this gateway gives it a curated, permissioned surface with local approval for anything risky.
Features
🔒 Default-deny security: allowlisted dirs/commands, blocklist, path & symlink traversal prevention, secret vault + redaction.
✅ Local approval queue: risk-2+ tools require explicit approval in the dashboard or CLI — ChatGPT's confirmation is never trusted alone.
🧾 Full audit log: every tool call recorded (with secrets redacted).
🧩 Skill system: create, validate, enable, run, install-from-git, publish, and generate skills from ChatGPT (always saved disabled).
🤖 Coding agents: drive Claude Code / Codex (plan → approve → execute → validate → diff) on registered projects.
🖥️ Local dashboard: status, approvals, audit, skills, projects, secrets, agents.
🌐 3-minute setup with Cloudflare Tunnel / ngrok and clipboard copy.
🔌 Adapters for OpenClaw, Desktop Commander, and arbitrary MCP servers.
3-minute setup
npx -y localant setupor:
npm install -g localant
localant setupsetup checks your environment, initializes config, generates an auth token,
enables built-in skills, starts the gateway + dashboard, opens a public tunnel,
copies the MCP URL to your clipboard, and prints the ChatGPT connection steps.
✅ LocalAnt is running
Local Gateway: http://127.0.0.1:8787
Dashboard: http://127.0.0.1:8788
MCP Endpoint: https://xxxxx.trycloudflare.com/mcp?key=********
Connect ChatGPT:
1. Open ChatGPT → Settings → Apps & Connectors
2. Advanced settings → Developer Mode ON
3. Connectors → Create
4. Paste the MCP URL above
5. Name it: LocalAntFrom source (this repo):
pnpm install && pnpm build && node packages/cli/dist/bin.js setup
ChatGPT setup
ChatGPT → Settings → Apps & Connectors
Advanced settings → Developer Mode ON
Connectors → Create
Paste the MCP URL (
https://…/mcp?key=<token>)Name it LocalAnt
Ask ChatGPT: "Run health check on my local app"
The token is embedded in the URL so the connector authenticates even where
custom headers aren't available. You can also send Authorization: Bearer <token>.
See docs/chatgpt-setup.md.
Security model
Risk | Meaning | Approval |
0 | read-only | none |
1 | safe write draft | config (default none) |
2 | file modification | required |
3 | shell / agent / network write | required |
4 | destructive / publish / deploy | double approval |
No raw shell by default — only
shell_run_allowed_commandagainst an allowlist.Filesystem access limited to allowed directories; sensitive paths (
~/.ssh,~/.aws,/etc, …) are always blocked; symlink escapes are caught.Secrets live in an encrypted local vault and are redacted from tool output and the audit log.
Generated/installed skills are disabled by default until you review them.
Full details: SECURITY.md.
Dashboard
A local-only dashboard (http://127.0.0.1:8788) shows status, the MCP endpoint
(with copy button), pending approvals, the audit log, skills (enable/disable),
projects, secret names, and coding agents.
Skills
Skills are the unit of extension. Layout:
skills/<name>/
skill.json # manifest: permissions + risk + tool schemas
README.md LICENSE CHANGELOG.md
src/index.ts # defineSkill({...})
tests/index.test.ts
examples/Manage them with skill_list/info/enable/disable/run/validate/... tools or the
CLI (localant skills ...). See docs/skills.md.
How to create a skill
import { defineSkill, z } from "@LocalAnt/skill-sdk";
export default defineSkill({
name: "hello-world",
tools: {
hello: {
description: "Say hello",
riskLevel: 0,
inputSchema: z.object({ name: z.string() }),
handler: async ({ name }) => ({ content: `Hello ${name}` }),
},
},
});How to generate a skill from ChatGPT
"Create a skill named
qiita-private-postthat posts private Qiita articles using a QIITA_TOKEN secret."
ChatGPT calls skill_generate_from_prompt. The gateway scaffolds the manifest,
README, source and tests, infers permissions, sets it disabled, and runs
validation. You review permissions in the dashboard, then skill_enable (which
requires approval). See docs/skills.md.
How to connect Claude Code
Enable an agent in config (codingAgents.claude-code.enabled = true), register a
project, then:
coding_agent_plan(agent:"claude-code", projectId:"my-app", task:"Plan SEO improvements")
# review the plan, approve, then:
coding_agent_start_task(agent:"claude-code", projectId:"my-app", task:"Implement the plan")
# creates a work branch, runs the agent, then:
coding_agent_get_diff(taskId) · coding_agent_run_validation(projectId)Execution is risk-3 (approval required), runs on a fresh branch, warns on a dirty tree, and is followed by diff + validation. See docs/coding-agents.md.
Codex example
Same flow with agent:"codex" once codingAgents.codex.enabled = true and the
codex CLI is on PATH.
Article publishing
Zenn: GitHub-repo method — writes
articles/<slug>.mdwithpublished:false, can open a PR branch. (zenn_*)Qiita: official API with
QIITA_TOKENfrom the vault; private-first. (qiita_*)note: draft-first local files; publishing requires the note-mcp adapter. (
note_*)
Publish actions are risk 4 (double approval). See docs/articles.md.
Browser automation
Playwright-based (optional peer dependency), using an isolated profile by
default. browser_open/screenshot/extract_text/click/type/... — all risk 3.
See docs/browser.md.
Android ADB
adb_list_devices/screenshot/tap/swipe/input_text/logcat/install_apk/....
Input/installs are risk 3 and audited. See docs/adb.md.
OpenClaw adapter
openclaw_status/list_skills/run_skill/list_sessions/... — bridges to a local
openclaw CLI if installed, otherwise returns clear install guidance. Every call
flows through the gateway's permission + approval + audit pipeline.
Desktop Commander adapter
desktop_commander_status/list_tools/run_tool — gated bridge; tools are never
exposed unmediated.
Existing MCP bridge
Register downstream MCP servers (mcp_server_register/list/status/...) to bundle
them behind the gateway's safety pipeline.
CLI
localant setup | start | stop | restart | status | doctor | update | uninstall
localant token rotate | show # re-issue the auth token (secrets preserved)
localant tunnel status
localant dashboard | logs
localant approvals list | approve <id> [--session] | deny <id>
localant skills list | info <name> | enable <name> | disable <name> | install <git-url> | validate <name> | publish <name>
localant projects list | add <path> [--name <n>] | remove <id>
localant secrets set <name> [value] | list | remove <name>Architecture
A pnpm + TypeScript monorepo with project references:
Package | Responsibility |
| config schema, paths, risk model, redaction, types, logger |
| stores, security guards, managers, tool registry, execution pipeline |
| Streamable HTTP |
| self-contained local dashboard |
|
|
|
|
See docs/architecture.md.
FAQ
Does ChatGPT get a raw shell? No. Only allowlisted commands run without approval; anything else needs an explicit local approval.
Where is my config?
~/Library/Application Support/LocalAnt(macOS),~/.config/LocalAnt(Linux),%APPDATA%/LocalAnt(Windows).Do I need Claude Code/Codex/adb/Playwright? Only for those specific tool families; they degrade gracefully with install guidance.
Is the tunnel safe? A public tunnel exposes the gateway; the auth token is required, the dashboard warns you, and you should stop the tunnel when idle.
Troubleshooting
localant doctor diagnoses your environment. More in
docs/troubleshooting.md.
How to uninstall
localant uninstall # prints steps
localant uninstall --purge # also deletes the config/data directory
npm uninstall -g localantContributing
Contributions are welcome — especially tests and security hardening. See CONTRIBUTING.md for setup, coding standards, and the release process, and ROADMAP.md for where the project is headed. Please report vulnerabilities privately per SECURITY.md.
License
MIT — see LICENSE.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yuga-hashimoto/localant'
If you have feedback or need assistance with the MCP directory API, please join our Discord server