Build Your Own Package
A local package definition describes bundled MCP source, not an arbitrary executable command. You ship reviewed source files, a pinned dependency lock and an explicit tool declaration; the connector runs that source on the user's machine.
Definition schema
{
"name": "My reviewed MCP",
"version": "1.0.0",
"runtime": "python",
"entrypoint": "server.py",
"files": [{ "path": "server.py", "content": "YOUR REVIEWED MCP SOURCE" }],
"tools": [{ "name": "example", "inputSchema": { "type": "object" } }],
"arguments": [],
"environment": [],
"elicitationOrigins": [],
"dependencyLock": null
}
The snippet above illustrates the shape of the schema. For an example that actually runs, use the downloadable Python Echo definition from the console.
The MCP's discovered tool names and schemas must match the administrator-reviewed declaration. A mismatch fails review.
Package rules
Environment variables
Declare the names your MCP needs in environment. Administrators approve names, never values. Users supply the actual values locally, to the process that starts their AI client.
A desktop client launched from a dock may not inherit values set in a shell profile. Document clearly for your users where their values need to be set.
Specific runtimes
Playwright and browser automation
Bundle a reviewed Node wrapper and a pinned lockfile. Provision the supported browser separately: browser downloads do not run through npm lifecycle scripts, which are disallowed in packages.
Users of a browser package need a browser installed explicitly for that approved package.
Wrapping an existing CLI
Write a narrowly scoped MCP adapter with explicit tools, validated arguments, cancellation handling and deliberate credential handling.
Avoid adapters that accept unrestricted shell command strings. They defeat the tool-level review and access control that the gateway provides, because the reviewed tool surface no longer describes what can actually run.
Design for serialized execution
Calls to one package are handled in the order they arrive rather than in parallel, which protects stateful browsers and files from overlapping operations. A call that waits too long is dropped rather than started late.
Design long-running tools to be cancellable and to report progress, rather than blocking a session for minutes.
Testing a new package
- Approve it as described in Administrator setup.
- Enable only its tools, and grant access to yourself first.
- Connect a test computer using the connect flow.
- Call each tool and confirm the result and the Activity record.
- Deny access and confirm the next call is blocked.
- Test with a second user on their own account.