README.md•2.39 kB
# MCP Server for Alloy Modeling Language
This is an MCP server that can let you run a local Alloy-Language server. You can use it to allow an LLM-powered agent to generate and execute Alloy modeling code.
> Alloy is an open source language and analyzer for software modeling. It has been used in a wide range of applications, from finding holes in security mechanisms to designing telephone switching networks. This site provides language documentation, tool downloads, and a repository of links to case studies and applications. As the open source community grows, this site will also provide access to extensions of the Alloy Analyzer, and tools built on top of it and on top of Kodkod, its model finding engine. ([alloytools.org](https://alloytools.org/))
This MCP server uses the [alloy-lang npm package](https://www.npmjs.com/package/alloy-lang) which bundles the language binary for easy use from nodejs.
## Installation
```bash
npm install
npm run build
```
## Usage
### As an MCP Server
Run the server using stdio transport:
```bash
npm start
```
Or use the built binary directly:
```bash
node build/index.js
```
### Development
```bash
# Build TypeScript
npm run build
# Build and run
npm run dev
# Lint code
npm run lint
# Fix linting issues
npm run lint:fix
# Run tests
npm test
```
## MCP Features
### Tools
- **execute_alloy**: Execute Alloy modeling language code and return structured JSON results
- Input: `code` (string) - The Alloy code to execute
- Output: JSON with instances, values, and solver results
### Resources
- **alloy://docs**: Basic Alloy language documentation and syntax reference
- **alloy://examples**: Example Alloy models (graphs, file systems, state machines)
### Prompts
- **create_alloy_model**: Generate an Alloy model based on a system description
- Input: `description` (string) - Description of the system to model
## Example Alloy Code
```alloy
sig Node {
edges: set Node
}
// No self-loops
fact { all n: Node | n not in n.edges }
// Find a graph with a cycle
run { some n: Node | n in n.^edges } for 5
```
## Resources
* [Github Repo - Alloy Modeling Language](https://github.com/AlloyTools/org.alloytools.alloy)
* [Version 6 overview](https://alloytools.org/alloy6.html)
* [Language documentation](https://alloytools.org/documentation.html)
* [Model Context Protocol](https://modelcontextprotocol.io)