Why OpenTools?
Our reason for existing is straightforward: building reliable tools today is messy. It is messy, time-consuming and way too easy to break.
Most developers are incorporating the over-engineered standard of MCP servers
just to let a bot read an email. Some end up building their own tool but it turns out that it doesn't work
beyond that demo you showed your friend on localhost. But it all takes too much time and too much effort. So instead
of focusing on your actual product and fixing the bugs in your project, you end up rewriting that
same tooling over and over again where you basically end up with your own library... just to connect to Alpaca.
So, that’s why we built OpenTools, an open-source SDK that makes tool-building feel like normal development again. You build locally, test locally, and ship something that survives beyond a prototype all through the same means you have already been using - a library:
pip install opentools-sdk
At its core, it exposes a simple function for each provider under a unified domain. For example, our first domain is
called trading and will only involve two integrations - Alpaca and Coinbase.
Simply put, OpenTools provides explicitly typed tools (structured input and output) that work consistently across multiple providers and frameworks you’re probably already using, such as Ollama and LangGraph. Models are exposed only to tools that follow a small, predictable set of standards, which helps keep responses accurate.
We also give you control over how those tools behave in different environments. You can limit token usage when efficiency matters, develop and test locally without friction, and still have the confidence that the same setup behaves safely once it reaches production. The goal is not to introduce more configuration, but to let the same tools scale naturally from experimentation to something you can actually ship.
Here’s exactly what we mean in practice, through an example within the trading domain, with alpaca as a provider:
tools = trading.alpaca(
# your auth
api_key=os.environ["ALPACA_KEY"],
api_secret=os.environ["ALPACA_SECRET"],
# specify the model, this is required for bundling tools correctly
model="openai",
# specify paper trading account or live trading account
paper=True,
# specify minimal output returned to model (maximum token efficiency)
minimal=True,
)
We want to make integrating tools easy, fun and reliable to make sure that you focus on the real consumer problems that you want to solve and not waste your time on AI-tooling.
But, to get us shipping even faster, we need your support.Our mission goes beyond making the most reliable tooling library but actually creating a community where we can find the solutions faster and lift each other up in the same process. That means sending us your favourite ideas, you want to work on or finding the small fixes we may have missed. We want to be working with you side-by-side so that we both can start shipping cool features faster. This is only the beginning but we hope this quick introduction, especially for those who we hope will actively contribute to the project, to our python sdk where we hope to introduct a typescript one soon! If you are interested in learning more, check out our recent open-source project and read up on our roadmap as we work hard to launch critical features for you to use. And, please, send us whatever crazy ideas you want to work on that involve the weird and cool integrations at hello@opentools.page!