-
Notifications
You must be signed in to change notification settings - Fork 65
[WC-3105]: Mendix Pluggable MCP #2035
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
…le ts, update docs
… directory errors
…y.md, clarify notifications
748d7fd to
86124a7
Compare
| ### entity | ||
|
|
||
| Entity selector. | ||
|
|
||
| ```json | ||
| { | ||
| "key": "targetEntity", | ||
| "type": "entity", | ||
| "caption": "Target entity" | ||
| } | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This type doesn't exist
| ```xml | ||
| <property key="dataSource" type="datasource" isList="true" required="false"> | ||
| <caption>Data source</caption> | ||
| <description>Source of items to display</description> | ||
| </property> | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we want to let it know about XML? If we have high level definition of how properties look like, we might just treat XML as black box, so LLM doesn't need to dive into it. Let's discuss this.
| ```json | ||
| { | ||
| "systemProperties": ["Name", "TabIndex", "Visibility"] | ||
| } | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe we can define every system property as a standalone property of particular shape, similar to other properties.
Something like:
{
type: "system",
name: "TabIndex"
}
| ```xml | ||
| <propertyGroup caption="Common"> | ||
| <systemProperty key="Name" /> | ||
| <systemProperty key="TabIndex" /> | ||
| </propertyGroup> | ||
| <propertyGroup caption="Visibility"> | ||
| <systemProperty key="Visibility" /> | ||
| </propertyGroup> | ||
| ``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Property groups have to be defined separately, they are not autogenerated. But we probably don't want to expose XML if we see it as implementation details.
|
|
||
| --- | ||
|
|
||
| ## Full Widget Definition Example |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is not clear how Property Groups are defined, are they part of this JSON, or supplied in a different was somehow?
| type WriteWidgetFileInput = z.infer<typeof writeWidgetFileSchema>; | ||
| type BatchWriteWidgetFilesInput = z.infer<typeof batchWriteWidgetFilesSchema>; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Those are two ways for doing essentially the same, can this confuse LLM more that it helps?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks like this file is empty
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we use this? I see currently LLM is able to read XML file directly, I didn't find where it communicates properties in json format.
Pull request type
New feature (non-breaking change which adds functionality)
Description
@mendix/pluggable-widgets-mcp— AI-Assisted Widget DevelopmentA new MCP server that lets AI assistants (Claude, GPT, etc.) scaffold and build Mendix widgets on your behalf.
The Goal
Lower the barrier to widget development. Getting started with widgets takes too many hurdles. This server gives you a first working version of the widget you describe, something you can iterate on later, without needing to know the scaffolding steps or our XML schema.
The AI follows our conventions because we provide guidelines as MCP resources. The only limit is the LLM's intelligence; everything else happens the way we do it as the web-content team.
Key Points
generations/folder;build-widgetproduces.mpkfilesWhat should be covered while testing?
Link globally for easier access:
npm link # Use npm, not pnpm, for better client compatibilityClaude Desktop config (On Mac:
~/Library/Application Support/Claude/claude_desktop_config.json):{ "mcpServers": { "pluggable-widgets-mcp": { "type": "stdio", "command": "pluggable-widgets-mcp" } } }Restart Claude Desktop and try: "Create a widget called ProgressCircle that shows a percentage in a circular progress bar"
For debugging, use MCP Inspector:
Example test flow
(In this example every step and tool is explicitly prompted. You won't acutally have to be this verbose with a decent LLM)
See
packages/pluggable-widgets-mcp/README.mdfor full docs.