{"repo":"PJUllrich/emcp","free":true,"listed":false,"github":"https://github.com/PJUllrich/emcp","clone":"git clone https://github.com/PJUllrich/emcp.git","description":"A Model Context Protocol (MCP) Server for Elixir","language":"Elixir","stars":33,"topics":[],"license":"MIT","category":"mcp-servers","readme_excerpt":"EMCP A minimal Elixir MCP (Model Context Protocol) server. Setup 1. Initialize the session store Add the session store initialization to your application's start/2 : You can use a custom session store by implementing the EMCP.SessionStore behaviour. 2. Define a server 3. Mount the transport Add the StreamableHTTP transport to your Phoenix router. Mount it outside any pipeline since EMCP handles content negotiation itself: 4. Add tools to your server Prompts Prompts are reusable templates that return structured messages: Resources Resources expose data that clients can read. A static resource has a fixed URI: Resource templates use URI patterns so clients can request dynamic content: When a client calls resources/read , the server first tries an exact URI match against static resources. If none match, it tries each resource template in order until one handles the URI. Origin validation To prevent DNS rebinding attacks, you can enable origin validation on the transport. When enabled, only requests with an Origin header matching the allowed list will be accepted. Requests without an Origin header (e.g. from CLI tools) are always allowed. Allowed origins can be specified as: - An empty list: [] - blocks all incoming requests with an Origin header - Full URLs: \"https://example.com\" — matches the exact scheme and host, plus any port - Bare domains: \"example.com\" — matches any scheme ( http or https ) and any port Origin matching is case-insensitive. If you want to allow all origins","default_branch":null,"files":null,"tree":[],"storefront":"/r/PJUllrich","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/PJUllrich/emcp/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}