{"id":30050935,"url":"https://github.com/mojolicious/mojo-mcp","last_synced_at":"2026-05-16T18:32:36.914Z","repository":{"id":307316523,"uuid":"1013659736","full_name":"mojolicious/mojo-mcp","owner":"mojolicious","description":"Perl SDK for Model Context Protocol servers and clients","archived":false,"fork":false,"pushed_at":"2026-05-06T20:24:08.000Z","size":72,"stargazers_count":16,"open_issues_count":2,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-06T20:36:28.764Z","etag":null,"topics":["mcp","mojolicious","perl"],"latest_commit_sha":null,"homepage":"https://metacpan.org/dist/MCP","language":"Perl","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mojolicious.png","metadata":{"files":{"readme":"README.md","changelog":"Changes","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-04T08:59:13.000Z","updated_at":"2026-05-06T20:24:13.000Z","dependencies_parsed_at":"2025-07-30T17:19:07.213Z","dependency_job_id":"4dc8a7e2-10a9-4820-9a5a-a108de47a2b6","html_url":"https://github.com/mojolicious/mojo-mcp","commit_stats":null,"previous_names":["mojolicious/mojo-mcp"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/mojolicious/mojo-mcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mojolicious%2Fmojo-mcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mojolicious%2Fmojo-mcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mojolicious%2Fmojo-mcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mojolicious%2Fmojo-mcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mojolicious","download_url":"https://codeload.github.com/mojolicious/mojo-mcp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mojolicious%2Fmojo-mcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33114191,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mcp","mojolicious","perl"],"created_at":"2025-08-07T14:17:21.969Z","updated_at":"2026-05-16T18:32:36.909Z","avatar_url":"https://github.com/mojolicious.png","language":"Perl","funding_links":[],"categories":["📦 Other","Frameworks \u0026 SDKs"],"sub_categories":["Trading \u0026 Exchanges"],"readme":"\n# MCP Perl SDK\n\n [![](https://github.com/mojolicious/mojo-mcp/workflows/linux/badge.svg)](https://github.com/mojolicious/mojo-mcp/actions) [![](https://github.com/mojolicious/mojo-mcp/workflows/macos/badge.svg)](https://github.com/mojolicious/mojo-mcp/actions)\n\n  [Model Context Protocol](https://modelcontextprotocol.io/) support for [Perl](https://perl.org) and the\n  [Mojolicious](https://mojolicious.org) real-time web framework.\n\n### Features\n\nPlease be aware that this module is still in development and will be changing rapidly. Additionally the MCP\nspecification is getting regular updates which we will implement. Breaking changes are very likely.\n\n  * Tool calling, prompts and resources\n  * Streamable HTTP and Stdio transports\n  * Notifications for list changes (tools, prompts, resources)\n  * Progress tracking for long-running operations\n  * Scalable with pre-forking web server and async tools using promises\n  * HTTP client for testing\n  * Can be embedded in Mojolicious web apps\n\n## Installation\n\n  All you need is Perl 5.20 or newer. Just install from [CPAN](https://metacpan.org/pod/MCP).\n\n    $ cpanm -n MCP\n\n  We recommend the use of a [Perlbrew](http://perlbrew.pl) environment.\n\n## Streamable HTTP Transport\n\nUse the `to_action` method to add an MCP endpoint to any Mojolicious application.\n\n```perl\nuse Mojolicious::Lite -signatures;\n\nuse MCP::Server;\n\nmy $server = MCP::Server-\u003enew;\n$server-\u003etool(\n  name         =\u003e 'echo',\n  description  =\u003e 'Echo the input text',\n  input_schema =\u003e {type =\u003e 'object', properties =\u003e {msg =\u003e {type =\u003e 'string'}}, required =\u003e ['msg']},\n  code         =\u003e sub ($tool, $args) {\n    return \"Echo: $args-\u003e{msg}\";\n  }\n);\n\nany '/mcp' =\u003e $server-\u003eto_action;\n\napp-\u003estart;\n```\n\nAuthentication can be added by the web application, just like for any other route.\n\n## Server-to-Client Streaming\n\nThe HTTP transport can optionally accept `GET` requests to open a long-lived SSE stream the server can push\nnotifications to, and `DELETE` requests to terminate a session. This requires per-process state and is not\ncompatible with pre-forking web servers, so it is opt-in.\n\n```perl\nuse Mojolicious::Lite -signatures;\n\nuse MCP::Server;\n\nmy $server = MCP::Server-\u003enew;\n$server-\u003etool(\n  name         =\u003e 'echo',\n  description  =\u003e 'Echo the input text',\n  input_schema =\u003e {type =\u003e 'object', properties =\u003e {msg =\u003e {type =\u003e 'string'}}, required =\u003e ['msg']},\n  code         =\u003e sub ($tool, $args) {\n    $tool-\u003econtext-\u003enotify('notifications/message', {level =\u003e 'info', data =\u003e \"Echoing: $args-\u003e{msg}\"});\n    return \"Echo: $args-\u003e{msg}\";\n  }\n);\n\nany '/mcp' =\u003e $server-\u003eto_action({streaming =\u003e 1});\n\napp-\u003estart;\n```\n\n## Stdio Transport\n\nBuild local command line applications and use the stdio transport for testing with the `to_stdio` method.\n\n```perl\nuse Mojo::Base -strict, -signatures;\n\nuse MCP::Server;\n\nmy $server = MCP::Server-\u003enew;\n$server-\u003etool(\n  name         =\u003e 'echo',\n  description  =\u003e 'Echo the input text',\n  input_schema =\u003e {type =\u003e 'object', properties =\u003e {msg =\u003e {type =\u003e 'string'}}, required =\u003e ['msg']},\n  code         =\u003e sub ($tool, $args) {\n    return \"Echo: $args-\u003e{msg}\";\n  }\n);\n\n$server-\u003eto_stdio;\n```\n\nJust run the script and type requests on the command line.\n\n```\n$ perl examples/echo_stdio.pl\n{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"tools/list\"}\n{\"jsonrpc\":\"2.0\",\"id\":\"2\",\"method\":\"tools/call\",\"params\":{\"name\":\"echo\",\"arguments\":{\"msg\":\"hello perl\"}}}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmojolicious%2Fmojo-mcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmojolicious%2Fmojo-mcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmojolicious%2Fmojo-mcp/lists"}