Ways to contribute
Build an integration
Add support for a service ModuleX does not connect to yet. This is the most impactful contribution — every new integration unlocks more tools for everyone.
Improve the docs
Fix a typo, clarify a step, or flag something that is out of date. Small edits add up to a much better reading experience.
Report a bug
Tell us when something does not work as described. A good bug report is one of the fastest ways to get a fix shipped.
Share feedback
Suggest a feature, describe a workflow you wish were easier, or tell us what you love. Product direction is shaped by what we hear.
ModuleX is developed on GitHub under the
ModuleXAI organization. The public integration catalog lives in the modulex-integrations repository, which is where most code contributions happen.Building integrations
An integration is a connector to an external service — for example GitHub, Slack, or a database. Each integration exposes one or more tools, the individual actions that a workflow, the AI Composer, and the Assistant can call. Adding an integration is the highest-leverage way to contribute, because the new tools become available to every ModuleX user. Integrations are authored as Python packages in the open-sourcemodulex-integrations repository. The full author’s guide — directory layout, the manifest, the @tool function contract, registering the entry point, and testing locally — lives on the build an integration page. Here is the shape of the work.
1
Pick a name and copy an existing tool
Choose a lowercase, snake-case name for your integration (for example
acme). Copy a similar folder under src/modulex_integrations/tools/ — github for a token-auth REST API, or exa for an API-key service — and edit it for your service. Every integration ships the same fixed file set, so reviews are mechanical.2
Write the manifest, tools, outputs, and tests
Fill in
manifest.py (the integration’s identity, actions, and how it authenticates), tools.py (one @tool function per action), outputs.py (the typed result models), and at least one happy-path test per tool. The full contracts are documented in the manifest and schema contract and the @tool function contract.3
Register the entry point
Add one line to the root
pyproject.toml under [project.entry-points."modulex.tools"] so the runtime can discover your integration. Without this line the runtime will not load your tool, even though it appears on disk.4
Run the checks and open a pull request
Run the tests, the linter, and the type checker locally, then open a pull request against
modulex-integrations. Reviewers confirm the contracts hold and that your integration follows the same patterns as the rest of the catalog.What reviewers look for
The contracts hold at import time
The contracts hold at import time
Every schema model rejects unknown fields, so a misspelled or extra manifest field fails when the module is imported. Importing the manifest — or running
pytest, which imports it — surfaces these errors before review.Names line up everywhere
Names line up everywhere
The integration name must be identical across the folder name, the manifest
name, the entry-point key, and the entry-point value. Each action name must equal a @tool function name listed in the TOOLS tuple.One consistent error pattern
One consistent error pattern
Pick a single way to signal failure across the integration — raise on HTTP errors, return an inline failure payload, or wrap calls in try/except — and apply it consistently. Set explicit timeouts on outbound calls.
Credentials never reach the model
Credentials never reach the model
The runtime injects credentials at call time and strips the credential fields from the schema the model sees. Follow the auth conventions in the @tool function contract so tokens are never exposed to the language model.
Start building
The complete, step-by-step guide to authoring an integration end to end.
Documentation and feedback
These docs are a living document. If a page is confusing, out of date, or missing something you needed, telling us is a real contribution.Suggest a docs change
Spotted a typo, a broken example, or a step that no longer matches the product? Open an issue describing the page and what is wrong, or propose the fix directly.
Report a bug
Found a defect in ModuleX itself? Open an issue with the steps to reproduce, what you expected, and what happened instead.
Request a feature
Describe the problem you are trying to solve, not just the solution you have in mind — it helps us find the best fit.
Ask the community
Join the ModuleX Discord to ask questions, share what you have built, and talk to other builders and the team.
How to write a report we can act on
A few details turn a vague message into something we can fix quickly. When you report a bug, please include:1
What you did
The exact steps to reproduce the problem, in order. If it involves the API, include the request (with secrets removed) and the surface it happened on.
2
What you expected
What you thought would happen.
3
What actually happened
The result you got, including any error message or status code. If you can, copy the full error rather than paraphrasing it.
4
Where and when
Whether it happened in the app, an SDK, or a direct API call; roughly when; and anything you already tried.
Never paste real secrets into an issue or a pull request. Redact API keys (anything starting with
mx_live_), access tokens, and other credentials before you share logs or requests. To report a security issue privately, email security@modulex.dev rather than opening a public issue.Community expectations
ModuleX is built by a community, and we want it to be a place where everyone is treated with respect. We ask everyone who takes part — in issues, pull requests, the Discord, and anywhere else — to follow a few simple principles.Be respectful
Assume good intent, disagree on ideas rather than people, and keep discussion constructive.
Be welcoming
People arrive with different backgrounds and levels of experience. Help newcomers and answer questions patiently.
Be clear
Give context, share the steps you took, and keep feedback specific and actionable.
Keep it safe
No harassment, no sharing of others’ private information, and no posting of secrets or sensitive data.
A formally published, versioned code of conduct for the ModuleX open-source repositories is not available yet. TBD — until one is published, the principles above describe what we expect of everyone in the community. If you experience or witness behavior that breaks them, contact the team at
contact@modulex.dev.Get help and stay current
Getting help
Where to find answers and how to reach a human when you are stuck.
System status
Check current health and where to watch for incidents before reporting an outage.
Changelog
See what has changed recently across ModuleX and these docs.