Create shareable links to run Symfony, Laravel or plain PHP code in the browser, no install.
Maintained by@Oipnet(verified)Also a maintainer?
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Creates a shareable link to a playground that runs the given code in the browser (PHP in WebAssembly), with no account and nothing to install. Give only the files you change or add: the others stay as in the starting project (see get_starter). Nothing is stored: the code travels inside the link, after the "#". The page asks the visitor before running code received by a link.
The files to change or add, by path relative to the project root (e.g. "src/Controller/AccueilController.php"), with their full content.
The playground: "symfony", "laravel" or "php" (no framework).
Language of the page: "fr" for a French-speaking user, else "en".
Symfony and plain PHP playgrounds: Composer packages to add, from the "packages" list of get_starter (e.g. "symfony/security-bundle", "nesbot/carbon"). For Symfony, their Flex recipe is applied when the page opens.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http php-playground https://apprendre.forelse.fr/mcp
Creates a shareable link to a playground that runs the given code in the browser (PHP in WebAssembly), with no account and nothing to install. Give only the files you change or add: the others stay as in the starting project (see get_starter). Nothing is stored: the code travels inside the link, after the "#". The page asks the visitor before running code received by a link.
| Argument | Type | Description |
|---|---|---|
| files* | object | The files to change or add, by path relative to the project root (e.g. "src/Controller/AccueilController.php"), with their full content. |
| language | string | Language of the page: "fr" for a French-speaking user, else "en". |
| packages | array | Symfony and plain PHP playgrounds: Composer packages to add, from the "packages" list of get_starter (e.g. "symfony/security-bundle", "nesbot/carbon"). For Symfony, their Flex recipe is applied when the page opens. |
| framework* | string | The playground: "symfony", "laravel" or "php" (no framework). |
{
"type": "object",
"required": [
"framework",
"files"
],
"properties": {
"files": {
"type": "object",
"description": "The files to change or add, by path relative to the project root (e.g. \"src/Controller/AccueilController.php\"), with their full content.",
"additionalProperties": {
"type": "string"
}
},
"language": {
"enum": [
"en",
"fr"
],
"type": "string",
"default": "en",
"description": "Language of the page: \"fr\" for a French-speaking user, else \"en\"."
},
"packages": {
"type": "array",
"items": {
"type": "string"
},
"default": [],
"description": "Symfony and plain PHP playgrounds: Composer packages to add, from the \"packages\" list of get_starter (e.g. \"symfony/security-bundle\", \"nesbot/carbon\"). For Symfony, their Flex recipe is applied when the page opens."
},
"framework": {
"enum": [
"symfony",
"laravel",
"php"
],
"type": "string",
"description": "The playground: \"symfony\", \"laravel\" or \"php\" (no framework)."
}
}
}Returns the starting project of a playground (Symfony 8, Laravel 13 or plain PHP 8.5 with Composer autoloading): its files, the paths you may create or edit, and, for Symfony and plain PHP, the Composer packages you may add. Call it before create_sandbox to write code that fits the project. Configuration files (config/, bootstrap/) are listed in config_files; ask for their content with include_config when you need to change one.
| Argument | Type | Description |
|---|---|---|
| language | string | Language of the starting project and its page: "fr" for a French-speaking user, else "en". |
| framework* | string | The playground: "symfony", "laravel" or "php" (no framework). |
| include_config | boolean | Also return the content of the configuration files (config/, bootstrap/), e.g. to reproduce a bug that depends on the configuration. |
{
"type": "object",
"required": [
"framework"
],
"properties": {
"language": {
"enum": [
"en",
"fr"
],
"type": "string",
"default": "en",
"description": "Language of the starting project and its page: \"fr\" for a French-speaking user, else \"en\"."
},
"framework": {
"enum": [
"symfony",
"laravel",
"php"
],
"type": "string",
"description": "The playground: \"symfony\", \"laravel\" or \"php\" (no framework)."
},
"include_config": {
"type": "boolean",
"default": false,
"description": "Also return the content of the configuration files (config/, bootstrap/), e.g. to reproduce a bug that depends on the configuration."
}
}
}Reads a playground link (https://<site>/bac-a-sable/... or /en/playground/...#code=..., or a short link /bac-a-sable/s/<id> or /en/playground/s/<id>): returns the framework and the files that differ from the starting project, to review or fix the code someone shared.
| Argument | Type | Description |
|---|---|---|
| url* | string | The full playground link: a short link (/s/<id>), or a long one including the part after "#code=". |
{
"type": "object",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"description": "The full playground link: a short link (/s/<id>), or a long one including the part after \"#code=\"."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 3, 2026.