{"id":13790853,"url":"https://github.com/strumenta/mpsserver","last_synced_at":"2025-12-24T05:25:30.452Z","repository":{"id":45206443,"uuid":"200508778","full_name":"Strumenta/MPSServer","owner":"Strumenta","description":null,"archived":false,"fork":false,"pushed_at":"2023-12-07T10:59:46.000Z","size":16070,"stargazers_count":19,"open_issues_count":21,"forks_count":4,"subscribers_count":6,"default_branch":"mps2020.3","last_synced_at":"2024-11-18T05:38:29.520Z","etag":null,"topics":["jetbrains-mps"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Strumenta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2019-08-04T15:22:00.000Z","updated_at":"2024-09-30T15:49:44.000Z","dependencies_parsed_at":"2024-11-18T05:32:27.187Z","dependency_job_id":"3b4b7ff6-b094-49fa-843d-7dbba8b50e77","html_url":"https://github.com/Strumenta/MPSServer","commit_stats":null,"previous_names":[],"tags_count":62,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Strumenta%2FMPSServer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Strumenta%2FMPSServer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Strumenta%2FMPSServer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Strumenta%2FMPSServer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Strumenta","download_url":"https://codeload.github.com/Strumenta/MPSServer/tar.gz/refs/heads/mps2020.3","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253709438,"owners_count":21951140,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["jetbrains-mps"],"created_at":"2024-08-03T22:00:52.020Z","updated_at":"2025-12-24T05:25:30.439Z","avatar_url":"https://github.com/Strumenta.png","language":"Python","funding_links":[],"categories":["[Built with MPS](#built-with-mps)"],"sub_categories":["Other projects"],"readme":"# MPSServer\n\n[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2FStrumenta%2FMPSServer%2Fbadge\u0026style=flat)](https://actions-badge.atrox.dev/Strumenta/MPSServer/goto)\n\n**Please take a look to this tutorial: [https://tomassetti.me/mpsserver-enabling-integration-with-mps/](https://tomassetti.me/mpsserver-enabling-integration-with-mps/)**\n\n**The tutorial explain you what MPSServer can be used for, and how to use it**\n\nThis is a solution that starts a server to read and modify MPS models through HTTP and WebSocket.\n\nThe server can be started from MPS running normally or in headless mode.\n\nThere is also a framework to define web editors interoperable with MPSServer. This framework is called [WebEditKit](https://github.com/Strumenta/webeditkit) and it is open-source.\n\n## License\n\nMPSServer is released under the Apache License V2\n\n## Exposed API\n\nIt is possible to use the MPSServer through:\n\n* HTTP calls, [documented here](documentation/routes.md)\n* WebSocket messages, [core messages](documentation/ws_core_documentation.html) and [Modelix extensions](documentation/ws_modelix_documentation.html)\n\n## Extensions\n\nIt is possible to specify extensions for the MPS Server.\n\nTODO: document how to do that.\n\n## Development\n\n### Testing\n\nThe project contains:\n\n* unit tests: written within MPS\n* functional tests: written in Python\n\nTo run the unit tests inside MPS, first you have to set the path\nvariable \"mpsserver.home\" (MPS \u003e Preferences \u003e Appearance \u0026 Behavior \u003e\nPath Variables) to the full path to the directory MPSServer/mpscode.\nThen, you can launch them from the MPS UI (right click \u003e run).\n\n### Release a new version\n\n* Check all tests pass on the CI server (currently using GitHub actions)\n* Set the version number in build.gradle\n* Add a tag: `git tag -a vVERSION_NAME` (message: \"Version VERSION_NAME\")\n* Ensure the tag is pushed\n* Run `./gradlew publish`\n* Log into `https://oss.sonatype.org/` to close \u0026 release\n\n## Test WebSocket\n\nOpen http://localhost:2904/\n\nOpen console\n\nType:\n\n```\nws = new WebSocket(\"ws://localhost:2904/socket\");\nws.onopen = () =\u003e {\n\tws.onmessage = (m)=\u003econsole.log(\"received\", m.data);\n\tws.send(JSON.stringify({type:\"GetProjectInfo\"}));\n}\n``` \n\n# Troubleshooting\n\n## The WebSocket connection is falling\n\nIt could be because of Chrome: https://solace.community/discussion/694/client-websocket-disconnects-when-browser-is-minimized-or-not-in-focus-chrome\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrumenta%2Fmpsserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstrumenta%2Fmpsserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrumenta%2Fmpsserver/lists"}