PHP, Symfony & Laravel playground
Server Details
Create shareable links to run Symfony, Laravel or plain PHP code in the browser, no install.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Oipnet/apprendre-forelse
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 3 tools
Each tool maps to a distinct action on a distinct resource: creating a shareable link, fetching a starting project template, and reading an existing link's code. There is no plausible way to confuse get_starter (input: framework name) with read_sandbox (input: URL) or create_sandbox (input: files).
All three tools follow the same snake_case verb_noun convention (create_sandbox, get_starter, read_sandbox). The verbs accurately signal the operation type, so the pattern is predictable and readable.
Three tools is on the lean side, but the domain is narrow — generate, template, and inspect a code playground — and each tool earns its place in that lifecycle. Nothing redundant is present, though the surface is small enough that one missing tool (see completeness) is conspicuous.
get_starter's description instructs the agent to 'ask for their content with include_config', but no such tool exists, creating a guaranteed dead end for any task requiring config file contents. The workflow create -> inspect -> re-create is otherwise workable, but config files are effectively uneditable and the toolset is all-or-nothing around that gap.
Available Tools
3 toolscreate_sandboxCreate a shareable PHP playgroundARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | The files to change or add, by path relative to the project root (e.g. "src/Controller/AccueilController.php"), with their full content. | |
| language | No | Language of the page: "fr" for a French-speaking user, else "en". | en |
| packages | No | 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 | Yes | The playground: "symfony", "laravel" or "php" (no framework). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, it discloses that nothing is stored, that code is embedded in the link fragment, and that visitors are asked before running linked code. These are important behavioral and safety details for an agent to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it leads with what is created, then explains file selection, storage behavior, and execution consent. Every sentence contributes useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter tool with no output schema, the description sufficiently explains the produced link and its behavior. It could be slightly more explicit about the returned value or how read_sandbox consumes the link, but no critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents framework, files, packages, and language. The description reinforces the files semantics but adds little parameter meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it creates a shareable link to a browser-run PHP playground. It also distinguishes the tool from the starter-project workflow by referring to get_starter for unchanged files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context: supply only files that are changed or added, while the rest come from the starting project. It does not explicitly explain when to use read_sandbox instead, so the alternative-selection guidance is not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_starterGet a playground starting projectARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Language of the starting project and its page: "fr" for a French-speaking user, else "en". | en |
| framework | Yes | The playground: "symfony", "laravel" or "php" (no framework). | |
| include_config | No | Also return the content of the configuration files (config/, bootstrap/), e.g. to reproduce a bug that depends on the configuration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, and the description adds real context beyond that: the return payload's three components, the fact that config/ and bootstrap/ files are surfaced only as a listing in config_files, and the remedy (include_config) for reading them. It still doesn't clarify whether non-config files come back with contents or as a bare listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what is returned before the call-order advice and the config escape hatch. The parenthetical framework/version list partially duplicates the enum values but earns its place by signaling supported runtime versions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so at a useful level of detail for a read-only starter-project fetch. The remaining ambiguity is whether file contents are included outside config files, which matters for an agent deciding between this and read_sandbox.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, and the description largely restates the framework options and include_config behavior. Its one genuine addition is naming the output field config_files, which the schema cannot convey since there is no output schema. Baseline 3 applies given the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns the starting project of a playground') and enumerates exactly what comes back: files, creatable/editable paths, and allowed Composer packages. The framework variants named in the parenthetical map directly to the enum, so an agent knows the scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordering rule tied to a named sibling: 'Call it before create_sandbox to write code that fits the project.' It also routes config-file needs to the include_config flag. It does not mention read_sandbox or state when this tool is unnecessary, so it falls short of a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_sandboxRead a shared PHP playgroundARead-onlyInspect
Reads a playground link (https:///bac-a-sable/... or /en/playground/...#code=..., or a short link /bac-a-sable/s/ or /en/playground/s/): returns the framework and the files that differ from the starting project, to review or fix the code someone shared.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The full playground link: a short link (/s/<id>), or a long one including the part after "#code=". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the return payload ('the framework and the files that differ from the starting project'), which is genuinely useful context for a tool with no output schema. It says nothing about failure behavior for expired or malformed links, which is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, with return content at the end. The parenthetical list of URL formats is dense but earns its place by clarifying input shapes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers input shapes and the shape of the result, which is enough to call it correctly. Error cases and any size limits on retrieved payloads are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single param already documents short vs long links including the '#code=' fragment. The description's URL examples largely restate that, adding only concrete path patterns; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Reads') and resource ('a playground link') and enumerates the accepted URL shapes, so the agent knows exactly what operation is performed. It never names the sibling tools, but 'read' is self-evidently distinct from create_sandbox and get_starter, so the differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The trailing clause 'to review or fix the code someone shared' implies the use case, but the description gives no explicit when-not conditions, no mention of what to do with links that fail to resolve, and no routing to alternatives. Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
- First observed
create_sandbox - First observed
get_starter - First observed
read_sandbox
Related MCP Connectors
Run Python code in a secure sandbox without local setup. Declare inline dependencies and execute s…
Publish HTML, Markdown, PDF, or images as instant shareable links with expiry and passwords.
Deploy and share small apps with team login, persistent data, versioned updates and domains.
Manage PHP apps on your own Ubuntu servers: deploy, roll back and inspect Laravel and WordPress
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides a remote coding environment for AI to publish static websites as live URLs, with live code editing and sandbox execution.18 npm19ISC

Purgatory (p7y)official
AlicenseBqualityAmaintenanceSelf-hosted Docker sandboxes for coding agents: create a sandbox with its own Docker daemon, deploy a docker-compose stack into it, read and write its files, and get a URL for every app. Tokens can be limited to one sandbox.386AGPL 3.0- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to start, manage, and embed live application previews in iframes, with support for multiple frameworks, Docker, tunnels, and authentication.MIT
- AlicenseNot gradedqualityDmaintenanceThe sessionless code interpreter. Securely run AI-generated code in stateful sandboxes that run forever.62 npm230MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.