Pure Rust MCP server bridging Language Server Protocol functionality to AI coding assistants
npm install @goobits/typemillPure Rust MCP server bridging Language Server Protocol functionality to AI coding assistants


Quick Start β’ Features β’ Tools β’ Documentation
---
``bash`
npx @goobits/typemill start
That's it. No installation required.
---
``
Before: After:
βββ src/ βββ src/
β βββ utils.ts ββββββββββββββΊ β βββ helpers.ts
β βββ app.ts β βββ app.ts
β β import { foo } from './utils'β β import { foo } from './helpers' β Updated!
β βββ index.ts β βββ index.ts
β import './utils' β import './helpers' β Updated!
``
Before: After:
βββ src/ βββ src/
β βββ components/ β βββ components/
β β βββ Button.tsx β β βββ ui/
β βββ App.tsx β β βββ Button.tsx βββ Moved!
β import { Button } β βββ App.tsx
β from './components/Button' β import { Button }
β β from './components/ui/Button' β Fixed!
`
> inspect_code("src/server.ts", line=42, character=15)
{
"definition": "src/types.ts:18",
"type": "interface ServerConfig { port: number; host: string; }",
"references": [
"src/server.ts:42",
"src/server.ts:67",
"src/config.ts:12"
]
}
`
`typescript
// Before: Messy inline code
const result = items
.filter(x => x.active)
.map(x => x.value * 2)
.reduce((a, b) => a + b, 0);
// After: refactor action="extract" kind="function" name="calculateActiveTotal"
function calculateActiveTotal(items: Item[]): number {
return items
.filter(x => x.active)
.map(x => x.value * 2)
.reduce((a, b) => a + b, 0);
}
const result = calculateActiveTotal(items);
`
---
``
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β AI Assistant β
β (Claude Code / Claude Desktop) β
βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β MCP Protocol (stdio/WebSocket)
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TypeMill β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββββββ β
β β inspect_codeβ β rename_all β β workspace β β
β β search_code β β relocate β β β’ find_replace β β
β β β β prune β β β’ extract_dependencies β β
β β β β refactor β β β’ verify β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββ
β Language Server Protocol
βββββββββββββββββββββΌββββββββββββββββββββ
βΌ βΌ βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β typescript- β β rust- β β pylsp β
β language- β β analyzer β β β
β server β β β β β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
.ts .js .rs .py
---
| Tool | Description |
|------|-------------|
| inspect_code | Get definition, references, type info, diagnostics at a position |search_code
| | Search workspace symbols with fuzzy matching |rename_all
| | Rename symbols, files, or directories (updates all imports) |relocate
| | Move symbols, files, or directories |prune
| | Delete with cleanup (removes unused imports) |refactor
| | Extract functions, inline variables, reorder code |workspace
| | Find/replace, dependency extraction, project verification |
All refactoring tools support dry-run mode (default) for safe previews.
---
bash
npx @goobits/typemill start
`
Supported platforms for the npm package build: macOS (arm64) and Linux (arm64).$3
`bash
npm install -g @goobits/typemill
typemill start
`$3
`bash
git clone https://github.com/goobits/typemill
cd typemill
cargo build --release
./target/release/mill start
`---
Configuration
Add to Claude Desktop (
~/.config/claude/claude_desktop_config.json):`json
{
"mcpServers": {
"typemill": {
"command": "npx",
"args": ["@goobits/typemill", "start"]
}
}
}
`---
Supported Languages
| Language | LSP Server | Extensions |
|----------|------------|------------|
| TypeScript/JavaScript | typescript-language-server |
.ts .tsx .js .jsx |
| Rust | rust-analyzer | .rs |
| Python | pylsp | .py` |---
MIT