interstellar
Health Uyari
- License — License: Apache-2.0
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Gecti
- Code scan — Scanned 6 files during light audit, no dangerous patterns found
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
A controlled gateway between AI agents and your infrastructure. -- https://github.com/talhaHavadar/wormholes
A controlled gateway between AI agents and your infrastructure.
Interstellar is an MCP server that an AI
agent connects to like any other — but instead of one fixed toolbox, its
functionality comes from wormholes: purpose-built plugins that each do one
job well (build a Debian package, reach a machine over SSH, bring up a VPN)
and compose with each other. The gateway sits in the middle and enforces
policy, records an audit log, and keeps the agent away from raw access.
AI agent ──MCP (JSON-RPC)──▶ interstellard ──gRPC──▶ wormhole plugins
│ policy │ audit │ (separate processes)
Design stance: wormholes expose specific, typed operations
(deb-builder__build_source_package(url)), not generic command
runners. Raw execution travels between wormholes over typed ports that agents
never see, and tools that accept caller-supplied commands are denied by
default policy until a server admin explicitly opts in.
See docs/architecture.md.
Status
Early development, but the core is end-to-end. Working today: the MCP gateway
(stdio + streamable HTTP), the wormhole plugin system and Go SDK,
capability-based policy, the audit log, and composition — the session
manager resolves the links a tool needs, chaining wormholes through
admin-defined targets (including routing one wormhole's connection through
another via via). First-party wormholes:
- exec-endpoint providers:
local-exec(gateway host),ssh(remote, with
key / password / agent auth, optionally tunnelled) - network-context providers:
wireguard(userspace WireGuard,
no-root/no-container) andtailscale(userspace tsnet) live in the separate
wormholes repo, where
heavy-dependency and third-party wormholes are kept so the core stays lean - consumers:
sysinfo,uname echo(self-contained, for trying the gateway out)
Not yet shipped: snap packaging with wormholes as snap components.
Quick start
make # builds bin/interstellard and bin/wormholes/*
bin/interstellard --wormhole-dir bin/wormholes
The MCP endpoint is now at http://127.0.0.1:8420. Add it to an agent — for
Claude Code:
claude mcp add --transport http interstellar http://127.0.0.1:8420
Or run it locally over stdio, no HTTP involved:
claude mcp add interstellar -- /path/to/interstellard --stdio --wormhole-dir /path/to/wormholes
Ask the agent to call interstellar__status to see what's loaded — wormholes,
tools (including ones hidden by policy or for lack of a target, and why), and
the configured targets.
Docker
The easiest way to self-host is the compose deployment —
config, secrets, persistence, and optional wormhole installers all wired up:
cd deploy/interstellar-mcp
cp .env.example .env # secrets (optional to start)
$EDITOR config.yaml # define your targets
docker compose up -d # gateway on http://127.0.0.1:8420
Adding a wormhole like tailscale is just uncommenting its installer service —
no building or copying, multi-arch images handle the rest. See the
compose README.
For a quick one-off, the published image also runs standalone:
docker run -p 8420:8420 -v interstellar-data:/var/lib/interstellar \
ghcr.io/talhahavadar/interstellar:latest
# build locally instead: docker build -t interstellar . && docker run ...
The image's audit log and config live under /var/lib/interstellar.
Composition
Wormholes that need to reach a machine declare a typed port; an admin binds
that port to a target in config. For example, point the sysinfo
wormhole at the gateway host:
# config.yaml
targets:
localhost:
wormhole: local-exec
port: host
bin/interstellard --config config.yaml --wormhole-dir bin/wormholes
Now sysinfo__get_system_info takes a shell_target argument (localhost),
and the gateway routes the call through the local-exec wormhole. Swap in thessh wormhole — optionally with via pointing at a VPN target — and the same
tool runs on a remote machine behind a tunnel, without the tool or the agent
knowing anything about the path. See
config.example.yaml and
docs/architecture.md.
Configuration
Copy config.example.yaml and pass it with--config. Flags (--listen, --wormhole-dir, --audit-log) override the
file. Policy lives in the config; capability names are validated at startup,
so a typo fails loudly instead of silently allowing or hiding tools.
Writing a wormhole
A wormhole is a single Go binary built on pkg/wormhole — about 30 lines for
a working one. See docs/creating-a-wormhole.md,
or read wormholes/echo, the minimal example.
Development
make test # unit + end-to-end (spawns real plugin processes)
make gen # regenerate gRPC code after editing proto/
The wire contract lives in
proto/interstellar/wormhole/v1;pkg/wormhole is the public SDK. Everything under internal/ is free to
change.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi