About MCP-Haskell (hs-mcp)
MCP-Haskell (hs-mcp) is a Haskell implementation of the Model Context Protocol for building MCP servers. It lets Haskell applications expose tools, resources and prompts to clients such as Claude. It is aimed at developers who want to write MCP servers in Haskell.
Key features
- 01Implements core MCP protocol functionality
- 02StdIO transport for local process communication
- 03JSON-RPC messaging
- 04Support for tools, resources and prompts
- 05Included test suite
Use cases
- 01Writing a custom MCP server in Haskell
- 02Testing MCP features with the bundled echo server
- 03Debugging a server with MCP Inspector or Claude Desktop
MCP support
As a server-side library, Haskell applications expose tools, resources and prompts to MCP clients such as Claude Desktop. The only transport described is StdIO.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEMCP-Haskell (hs-mcp)
A Haskell implementation of the Model Context Protocol (MCP).
Overview
MCP-Haskell (hs-mcp) provides a Haskell implementation of the Model Context Protocol, allowing Haskell applications to expose tools, resources, and prompts to MCP-compatible clients like Claude.
Key features:
- Full implementation of MCP protocol
- StdIO transport for local process communication
- JSON-RPC messaging
- Support for resources, tools, and prompts
- Comprehensive test suite
Installation
# Clone the repository
git clone github.com:buecking/hs-mcp.git
cd hs-mcp
# direnv
# echo 'use flake' > .envrc
direnv allow
# nix
nix develop
# Build the project
cabal build
Usage
Creating a simple server
import Network.MCP.Server
import Network.MCP.Types
import Network.MCP.Server.StdIO
main :: IO ()
main = do
-- Create server
let serverInfo = Implementation "my-server" "1.0.0"
serverCapabilities = ServerCapabilities
{ resourcesCapability = Just $ ResourcesCapability True
, toolsCapability = Just $ ToolsCapability True
, promptsCapability = Nothing
}
server <- createServer serverInfo serverCapabilities
-- Register resources (optional)
let resource = Resource
{ resourceUri = "my://resource"
, resourceName = "My Resource"
, resourceDescription = Just "Description"
, resourceMimeType = Just "text/plain"
, resourceTemplate = Nothing
}
registerResources server [resource]
-- Register resource read handler
registerResourceReadHandler server $ \request -> do
-- Implement resource reading logic
...
-- Register tools (optional)
let tool = Tool
{ toolName = "my-tool"
, toolDescription = Just "My tool"
, toolInputSchema = "{...}" -- JSON schema
}
registerTools server [tool]
-- Register tool call handler
registerToolCallHandler server $ \request -> do
-- Implement tool execution logic
...
-- Start the server with StdIO transport
runServerWithSTDIO server
Example Server
The project includes an example echo server that demonstrates the MCP functionality:
# Build and run the example server
cabal run mcp-echo-server
You can test it with the MCP Inspector or Claude Desktop.
Testing
Run the test suite:
cabal test
Protocol Compatibility
This implementation follows the Model Context Protocol specification and is compatible with:
- Claude Desktop
- MCP Inspector
- Other MCP clients following the specification
Project Structure
src/Network/MCP/Types.hs- Core MCP typessrc/Network/MCP/Transport/- Transport implementationssrc/Network/MCP/Server/- Server implementationExamples/- Example implementationsTest/- Test suite
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the BSD-3-Clause License - see the LICENSE file for details.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.