|
1 | | -# aidrelay — AI Developer Relay |
| 1 | +# aidrelay |
2 | 2 |
|
3 | | -**Centralized MCP server config and AI coding rules manager for Windows.** |
| 3 | +aidrelay is a Windows desktop app that lets you manage MCP servers, AI rules, skills, and sync workflows across multiple AI coding tools from one place. Instead of editing many client-specific JSON and markdown files, you maintain one source of truth and sync from there. |
4 | 4 |
|
5 | | -aidrelay gives you a single place to manage your Model Context Protocol (MCP) server configurations and AI coding rules across every AI development tool on your machine — Cursor, VS Code, Claude Desktop, Windsurf, Zed, JetBrains, and more. |
| 5 | +Supported clients include Cursor, VS Code, Claude Desktop, Windsurf, Zed, JetBrains IDEs, Claude Code, and Codex. |
6 | 6 |
|
7 | | ---- |
| 7 | + |
8 | 8 |
|
9 | | -## What it does |
| 9 | +## What It Does |
10 | 10 |
|
11 | | -- **One config, all tools.** Add an MCP server once and aidrelay syncs it to every AI tool you have installed — no more editing JSON files by hand in five different locations. |
12 | | -- **AI rules management.** Write and maintain your AI coding rules in Markdown, then sync them to `.cursorrules`, `CLAUDE.md`, `AGENTS.md`, or any other format your tools understand. |
13 | | -- **Profiles.** Create named configurations (e.g. "Work", "Personal", "Client X") and switch between them with one click — or right from the system tray. |
14 | | -- **Backup & restore.** Every sync creates a snapshot of the client config before touching it. Roll back to any previous state in one click. |
15 | | -- **Secrets management.** Environment variable secrets are stored in Windows Credential Manager (via `keytar`), never in plain text. |
16 | | -- **Registry browser.** Search the Smithery MCP registry and install servers directly. |
17 | | -- **Git sync.** Push your entire config to a private Git repository for cross-machine portability. |
| 11 | +- Centralizes MCP server and AI rule management for multiple AI clients. |
| 12 | +- Helps you install and maintain skills, MCP registry entries, and local tool setup. |
| 13 | +- Adds safer sync workflows with previews, conflict handling, backups, and restore options. |
18 | 14 |
|
19 | | ---- |
| 15 | +## What Problem It Solves |
20 | 16 |
|
21 | | -## Tech stack |
| 17 | +- You keep the same MCP server setup in several tools and configs drift over time. |
| 18 | +- You maintain separate AI rules files for each client format. |
| 19 | +- You need to manage skill files and setup state across machines and projects. |
| 20 | +- Manual edits are easy to break, hard to validate, and hard to roll back. |
| 21 | +- Moving your setup between machines takes too much repeated work. |
22 | 22 |
|
23 | | -| Layer | Technology | |
24 | | -|-------|-----------| |
25 | | -| Shell | Electron 34+ via electron-vite | |
26 | | -| UI | React 19, TypeScript (strict), Tailwind CSS 4, shadcn/ui | |
27 | | -| State | Zustand | |
28 | | -| Routing | TanStack Router | |
29 | | -| Tables | TanStack Table | |
30 | | -| Forms | React Hook Form + Zod | |
31 | | -| Code editor | Monaco Editor | |
32 | | -| Markdown | @uiw/react-md-editor | |
33 | | -| Database | better-sqlite3 (local SQLite) | |
34 | | -| Secrets | keytar (Windows Credential Manager) | |
35 | | -| Git | isomorphic-git | |
36 | | -| i18n | i18next + react-i18next | |
37 | | -| Packaging | electron-builder (NSIS installer) | |
38 | | -| Auto-update | electron-updater + GitHub Releases | |
| 23 | +## Who It Is For |
| 24 | + |
| 25 | +- Developers who use more than one AI coding tool. |
| 26 | +- Developers who want one source of truth for MCP servers, rules, and skills. |
| 27 | +- Users who want local-first control with backup and restore options. |
| 28 | + |
| 29 | +## Features |
| 30 | + |
| 31 | +### Dashboard And Client Operations |
| 32 | + |
| 33 | +- Detect installed clients and their config status in one dashboard. |
| 34 | +- Install supported clients, validate configs, and manage per-client sync items. |
| 35 | +- Preview sync changes before writing and confirm only actionable updates. |
| 36 | +- Preview and import config differences found in client files. |
| 37 | + |
| 38 | +### MCP Server Management |
| 39 | + |
| 40 | +- Create, edit, enable, disable, and delete MCP servers from one table. |
| 41 | +- Test server connectivity directly from the server list. |
| 42 | +- Control per-client server toggles with a matrix view. |
| 43 | +- Import servers from existing client configs. |
| 44 | +- Run install and repair flows with the local installer wizard. |
| 45 | + |
| 46 | +### Rules Management |
| 47 | + |
| 48 | +- Create, edit, enable, disable, and delete rules in one place. |
| 49 | +- Filter by category, switch between global and project scopes, and sync to clients. |
| 50 | +- Import rules from project files. |
| 51 | +- Track estimated token usage with a token budget panel. |
| 52 | + |
| 53 | +### Profiles |
| 54 | + |
| 55 | +- Create and manage named profiles for different contexts. |
| 56 | +- Switch active profiles and apply profile changes through an activation flow. |
| 57 | + |
| 58 | +### Skills Management (CRUD + Sync) |
| 59 | + |
| 60 | +- Browse curated skills and install with a preview-first flow. |
| 61 | +- Choose safe install or replace when conflicts are detected. |
| 62 | +- Create your own skills with a step-by-step wizard. |
| 63 | +- Edit skill files, reveal paths, enable or disable, and delete installed skills. |
| 64 | +- Run legacy skill migration and resolve skill sync conflicts. |
| 65 | + |
| 66 | +### Registry Install |
| 67 | + |
| 68 | +- Search and browse MCP servers from Smithery and Official MCP Registry providers. |
| 69 | +- Prepare install options and install directly into your local server registry. |
| 70 | + |
| 71 | +### Sync Center |
| 72 | + |
| 73 | +- Review post-sync setup items in the Needs Setup tab and apply them. |
| 74 | +- Resolve local vs remote conflicts in the Conflicts tab. |
| 75 | +- Review outgoing changes in Push Review before finalizing decisions. |
| 76 | +- Copy a diagnostics report for troubleshooting. |
| 77 | + |
| 78 | +### Git Sync And Cross-Device |
| 79 | + |
| 80 | +- Connect via GitHub OAuth or manual remote configuration. |
| 81 | +- Test remote connectivity, then pull, push, or disconnect from settings. |
| 82 | +- Use sync conflict and push review workflows to keep machines aligned. |
| 83 | + |
| 84 | +### Safety And Traceability |
| 85 | + |
| 86 | +- Create backups automatically before sync writes. |
| 87 | +- Filter and inspect backup history across clients. |
| 88 | +- Restore older config snapshots when needed. |
| 89 | +- Review a filterable activity log of sync and management actions. |
| 90 | + |
| 91 | +### Portability |
| 92 | + |
| 93 | +- Export selected servers and rules as stack bundles. |
| 94 | +- Import stack bundles to bootstrap or share setups. |
| 95 | + |
| 96 | +### Security And Local-First |
| 97 | + |
| 98 | +- Store secrets in Windows Credential Manager via `keytar`. |
| 99 | +- Keep local state in SQLite on your machine. |
| 100 | +- Avoid storing sensitive tokens in plaintext project files. |
| 101 | + |
| 102 | +## Screenshots |
| 103 | + |
| 104 | +### Dashboard Overview |
| 105 | + |
| 106 | + |
| 107 | + |
| 108 | +### Clients Management |
| 109 | + |
| 110 | + |
| 111 | + |
| 112 | +### Servers Management |
39 | 113 |
|
40 | | ---- |
| 114 | + |
41 | 115 |
|
42 | | -## Getting started (development) |
| 116 | +### Rules Editor (Markdown + Preview) |
| 117 | + |
| 118 | + |
| 119 | + |
| 120 | +### Skills Discovery And Install |
| 121 | + |
| 122 | + |
| 123 | + |
| 124 | +### Skills Installed CRUD |
| 125 | + |
| 126 | + |
| 127 | + |
| 128 | +### Skills Edit Flow |
| 129 | + |
| 130 | + |
| 131 | + |
| 132 | +### Registry Install (Smithery) |
| 133 | + |
| 134 | + |
| 135 | + |
| 136 | +### Sync Center Conflicts |
| 137 | + |
| 138 | +@todo Capture Sync Center with Needs Setup and Conflicts counts visible and a conflict resolution card open. |
| 139 | + |
| 140 | +### Profiles And Activation Flow |
| 141 | + |
| 142 | + |
| 143 | + |
| 144 | +### History And Restore |
| 145 | + |
| 146 | + |
| 147 | + |
| 148 | +### Activity Log |
| 149 | + |
| 150 | + |
| 151 | + |
| 152 | +### Stacks Import And Export |
| 153 | + |
| 154 | + |
| 155 | + |
| 156 | +### Settings + Git Sync |
| 157 | + |
| 158 | +@todo Capture settings with Git Sync section expanded, including remote URL, test remote, pull, push, and disconnect actions. |
| 159 | + |
| 160 | +## Development |
43 | 161 |
|
44 | 162 | ### Prerequisites |
45 | 163 |
|
46 | | -- Node.js ≥ 20 |
47 | | -- pnpm ≥ 9 |
48 | | -- Windows 10/11 (primary target; macOS/Linux builds planned) |
| 164 | +- Node.js >= 20 |
| 165 | +- pnpm >= 9 |
| 166 | +- Windows 10/11 (primary target) |
49 | 167 |
|
50 | 168 | ### Setup |
51 | 169 |
|
52 | 170 | ```bash |
53 | | -# Clone the repository |
| 171 | +# Clone repository |
54 | 172 | git clone https://github.com/christianblank91/aidrelay.git |
55 | 173 | cd aidrelay |
56 | 174 |
|
57 | | -# Install dependencies (rebuilds native modules automatically) |
| 175 | +# Install dependencies |
58 | 176 | pnpm install |
59 | 177 |
|
60 | | -# Start in development mode |
| 178 | +# Start development app |
61 | 179 | pnpm dev |
62 | 180 | ``` |
63 | 181 |
|
64 | | -The app opens an Electron window with hot-reload. The Chrome DevTools MCP is enabled in dev mode so you can connect to the renderer via `chrome://inspect` on port 9222. |
65 | | - |
66 | 182 | ### Scripts |
67 | 183 |
|
68 | 184 | | Command | Description | |
69 | | -|---------|-------------| |
| 185 | +| ------- | ----------- | |
70 | 186 | | `pnpm dev` | Start Electron in development mode with HMR | |
71 | | -| `pnpm build` | Compile all processes with electron-vite | |
72 | | -| `pnpm dist:win` | Build + package a Windows NSIS installer | |
73 | | -| `pnpm typecheck` | Run TypeScript across all three tsconfigs | |
74 | | -| `pnpm lint` | ESLint across all source files | |
| 187 | +| `pnpm build` | Build main, preload, and renderer bundles | |
| 188 | +| `pnpm dist:win` | Build and package a Windows installer | |
| 189 | +| `pnpm typecheck` | Run TypeScript checks across all tsconfig targets | |
| 190 | +| `pnpm lint` | Run ESLint across source files | |
75 | 191 | | `pnpm test` | Run the full Vitest test suite | |
76 | | -| `pnpm test:watch` | Vitest in watch mode | |
77 | | - |
78 | | ---- |
| 192 | +| `pnpm test:watch` | Run Vitest in watch mode | |
79 | 193 |
|
80 | | -## Project structure |
| 194 | +### Project Structure |
81 | 195 |
|
82 | | -``` |
| 196 | +```text |
83 | 197 | src/ |
84 | 198 | main/ # Electron main process (Node.js) |
85 | | - clients/ # ClientAdapter implementations per AI tool |
86 | | - db/ # SQLite repositories + migrations |
87 | | - git-sync/ # isomorphic-git wrapper |
88 | | - ipc/ # IPC handler registrations |
89 | | - registry/ # Smithery API client |
90 | | - rules/ # Rule sync, format conversion, token estimator |
91 | | - secrets/ # keytar wrapper for Windows Credential Manager |
92 | | - sync/ # Safety-first sync service + backup + file watcher |
93 | | - testing/ # MCP server connection tester |
94 | | - tray/ # System tray icon + profile quick-switch |
95 | | - updater/ # electron-updater wrapper |
96 | | - preload/ # contextBridge IPC bridge (typed window.api) |
| 199 | + clients/ # Client adapters per AI tool |
| 200 | + db/ # SQLite repositories and migrations |
| 201 | + git-sync/ # isomorphic-git integration |
| 202 | + ipc/ # IPC handlers |
| 203 | + registry/ # Registry API clients |
| 204 | + rules/ # Rule sync and format conversion |
| 205 | + secrets/ # Secret storage wrapper |
| 206 | + sync/ # Sync orchestration, backup, file watching |
| 207 | + testing/ # MCP server connection testing |
| 208 | + tray/ # System tray integration |
| 209 | + updater/ # App update integration |
| 210 | + preload/ # Typed contextBridge API |
97 | 211 | renderer/ # React UI |
98 | | - components/ # Reusable components, organized by domain |
99 | | - i18n/ # English + German translations |
100 | | - lib/ # Renderer utility hooks |
101 | | - pages/ # One file per route |
| 212 | + components/ # UI components by domain |
| 213 | + i18n/ # Translation files |
| 214 | + pages/ # Route pages |
102 | 215 | stores/ # Zustand stores |
103 | | - shared/ # Types + IPC channel definitions shared by all processes |
| 216 | + shared/ # Shared types and IPC channel contracts |
104 | 217 | ``` |
105 | 218 |
|
106 | | ---- |
| 219 | +### Configuration |
107 | 220 |
|
108 | | -## Configuration |
| 221 | +Copy `.env.example` to `.env` and provide OAuth values: |
109 | 222 |
|
110 | | -### Environment variables |
111 | | - |
112 | | -Copy `.env.example` to `.env` and fill in the values: |
113 | | - |
114 | | -``` |
| 223 | +```bash |
115 | 224 | VITE_GITHUB_CLIENT_ID=your-github-oauth-client-id |
116 | 225 | VITE_GITHUB_CLIENT_SECRET=your-github-oauth-client-secret |
117 | 226 | ``` |
118 | 227 |
|
119 | | -If `VITE_GITHUB_CLIENT_ID` or `VITE_GITHUB_CLIENT_SECRET` are missing, the Settings Git Sync flow will show an actionable in-app error and GitHub OAuth connect will not start. |
| 228 | +If these are missing, GitHub OAuth connect in Settings will not start. |
120 | 229 |
|
121 | | -Secrets (API tokens, local credentials) are never stored in `.env` — they go through `electron.safeStorage` or the Windows Credential Manager. |
| 230 | +## Tech Stack |
122 | 231 |
|
123 | | ---- |
| 232 | +| Layer | Technology | |
| 233 | +| ----- | ---------- | |
| 234 | +| Shell | Electron 34+ via electron-vite | |
| 235 | +| UI | React 19, TypeScript, Tailwind CSS 4, shadcn/ui | |
| 236 | +| State | Zustand | |
| 237 | +| Routing | TanStack Router | |
| 238 | +| Tables | TanStack Table | |
| 239 | +| Forms | React Hook Form + Zod | |
| 240 | +| Code editor | Monaco Editor | |
| 241 | +| Markdown | @uiw/react-md-editor | |
| 242 | +| Database | better-sqlite3 (local SQLite) | |
| 243 | +| Secrets | keytar (Windows Credential Manager) | |
| 244 | +| Git | isomorphic-git | |
| 245 | +| i18n | i18next + react-i18next | |
| 246 | +| Packaging | electron-builder (NSIS installer) | |
| 247 | +| Auto-update | electron-updater + GitHub Releases | |
124 | 248 |
|
125 | 249 | ## License |
126 | 250 |
|
127 | | -MIT License — © 2026 Christian Blank. |
| 251 | +MIT License - Copyright (c) 2026 Christian Blank. |
128 | 252 |
|
129 | 253 | The following companion packages are MIT-licensed and maintained in separate repositories: |
130 | 254 |
|
131 | | -- [`@aidrelay/adapter-spec`](https://github.com/christianblank91/aidrelay-adapter-spec) — ClientAdapter interface + format spec |
132 | | -- [`@aidrelay/rules-format`](https://github.com/christianblank91/aidrelay-rules-format) — AI rules format specification |
133 | | -- [`@aidrelay/stacks`](https://github.com/christianblank91/aidrelay-stacks) — Community rule templates and MCP stacks |
| 255 | +- [`@aidrelay/adapter-spec`](https://github.com/christianblank91/aidrelay-adapter-spec) - ClientAdapter interface + format spec |
| 256 | +- [`@aidrelay/rules-format`](https://github.com/christianblank91/aidrelay-rules-format) - AI rules format specification |
| 257 | +- [`@aidrelay/stacks`](https://github.com/christianblank91/aidrelay-stacks) - Community rule templates and MCP stacks |
0 commit comments