https://github.com/bmorphism/babashka-mcp-server
A Model Context Protocol server for interacting with Babashka, a native Clojure interpreter for scripting
https://github.com/bmorphism/babashka-mcp-server
Last synced: about 2 months ago
JSON representation
A Model Context Protocol server for interacting with Babashka, a native Clojure interpreter for scripting
- Host: GitHub
- URL: https://github.com/bmorphism/babashka-mcp-server
- Owner: bmorphism
- Created: 2025-01-05T11:02:41.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2025-01-05T11:09:42.000Z (6 months ago)
- Last Synced: 2025-04-17T13:03:08.904Z (2 months ago)
- Language: JavaScript
- Size: 4.84 MB
- Stars: 13
- Watchers: 2
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- mcp-index - Babashka - Execute Babashka (Clojure) scripts, manage command execution, cache command results, and access command history while utilizing configurable command timeouts. (Code Execution)
README
# Babashka MCP Server
A Model Context Protocol server for interacting with [Babashka](https://github.com/babashka/babashka), a native Clojure interpreter for scripting.
## Features
- Execute Babashka code through MCP tools
- Cache recent command results
- Access command history through MCP resources
- Configurable command timeouts## Prerequisites
### Install Babashka
Babashka can be installed in several ways:
#### macOS
```bash
brew install borkdude/brew/babashka
```#### Linux
```bash
bash < <(curl -s https://raw.githubusercontent.com/babashka/babashka/master/install)
```#### Windows
```powershell
# Using scoop
scoop install babashka
```For other installation methods, see the [official Babashka installation guide](https://github.com/babashka/babashka#installation).
### Verify Installation
After installation, verify Babashka works:
```bash
# Check version
bb --version# Try a simple expression
bb -e '(+ 1 2 3)'# Run a script from string
bb -e '(defn hello [x] (str "Hello, " x "!")) (hello "World")'# Use -i flag to process lines of input
ls | bb -i '(take 2 *input*)'
```## Installation
```bash
# Install dependencies
npm install# Build the MCP server
npm run build
```## Configuration
The server can be configured through environment variables:
- `BABASHKA_PATH`: Path to the Babashka executable (default: "bb")
## Tools
### execute
Execute Babashka code with optional timeout:
```typescript
{
name: "execute",
arguments: {
code: string; // Babashka code to execute
timeout?: number; // Timeout in milliseconds (default: 30000)
}
}
```Example:
```typescript
{
name: "execute",
arguments: {
code: "(+ 1 2 3)",
timeout: 5000
}
}
```## Resources
The server maintains a cache of recent command executions accessible through:
- `babashka://commands/{index}` - Access specific command results by index
## Babashka Language Features
### Tail Call Optimization (TCO)
Babashka supports explicit tail call optimization through the `recur` special form, but does not implement automatic TCO. For example:
```clojure
;; This will cause stack overflow
(defn countdown [n]
(if (zero? n)
:done
(countdown (dec n))));; This works with TCO using recur
(defn countdown [n]
(if (zero? n)
:done
(recur (dec n))))
```## Useful Resources
### Official Resources
- [Babashka GitHub Repository](https://github.com/babashka/babashka) - The main Babashka project
- [Babashka Book](https://book.babashka.org) - Official documentation
- [Babashka Examples](https://github.com/babashka/babashka/blob/master/doc/examples.md) - Collection of example scripts### Community Tools & Libraries
- [pod-babashka-buddy](https://github.com/babashka/pod-babashka-buddy) - Cryptographic API for Babashka
- [bb-clis](https://github.com/cldwalker/bb-clis) - Collection of useful Babashka CLI scripts
- [bb-scripts](https://github.com/vedang/bb-scripts) - Various utility scripts for Babashka### Development Tools
- [setup-babashka](https://github.com/turtlequeue/setup-babashka) - GitHub Actions for installing Babashka
- [babashka-docker-action](https://github.com/tzafrirben/babashka-docker-action) - Run Babashka scripts in GitHub Actions## Development
This server is designed to eventually become self-hosting, meaning it will be rewritten in Babashka itself. The current TypeScript implementation serves as a reference and starting point.
## Roadmap
1. **Self-Hosted Implementation**
- Rewrite the MCP server in Babashka
- Leverage Babashka's native capabilities for better performance
- Remove Node.js dependency
- Maintain full compatibility with MCP protocol
- Support all current features:
- Command execution
- Resource management
- Command history
- Timeout handling2. **Enhanced Features**
- Add support for Babashka pods
- Implement file watching capabilities
- Add REPL integration
- Support for multiple Babashka instances3. **Performance Optimizations**
- Implement caching strategies
- Optimize resource usage
- Reduce startup time4. **Testing & Documentation**
- Comprehensive test suite
- API documentation
- Usage examples
- Performance benchmarks