carlyemail-toolkit
CarlyEmail's email tools for the OpenAI Agents SDK, LangChain, LiveKit Agents, and any other agent framework. A real inbox your agent can send, receive and reply from, without writing the tools yourself.
pip install "carlyemail-toolkit[openai]" # or [langchain], [livekit]
export CARLYEMAIL_API_KEY=ce_us_...
from agents import Agent
from carlyemail_toolkit.openai import CarlyEmailToolkit
agent = Agent(
name="Inbox",
instructions="Read the thread before replying. Draft when unsure.",
tools=CarlyEmailToolkit().get_tools(),
)
from langchain.agents import create_agent
from carlyemail_toolkit.langchain import CarlyEmailToolkit
agent = create_agent("openai:gpt-5-mini", CarlyEmailToolkit().get_tools())
from livekit.agents import Agent
from carlyemail_toolkit.livekit import CarlyEmailToolkit
agent = Agent(instructions="...", tools=CarlyEmailToolkit().get_tools())
from carlyemail_toolkit import CarlyEmailToolkit # no framework
for tool in CarlyEmailToolkit().get_tools():
tool.name, tool.description, tool.input_schema, tool.read_only
tool(thread_id="...") # runs it
What is in it
The 25 tools the hosted MCP server serves — inboxes, threads, messages, drafts, attachments, labels, and account verification — with the same names, descriptions and parameter schemas, called over the REST API. Pass names to take only some:
tools = CarlyEmailToolkit().get_tools(["list_messages", "get_thread", "reply_to_message"])
A name that is not a tool raises rather than being dropped.
Which inbox
Every tool takes inbox_id, and most work without it. A key scoped to one
inbox means that inbox. An organization with one inbox means that one. With
several, the tools that read threads and drafts look across all of them, and
every other tool refuses and names the inboxes so the agent can ask which —
the same behaviour as the hosted server.
Errors
A failed call comes back to the model as one bounded line carrying the API's
message and the fix it suggests — an Error: … tool result on the OpenAI
Agents SDK, a handled ToolException on LangChain, a ToolError on LiveKit —
so the agent can act on it next turn instead of the run ending.
Release files for carlyemail-toolkit 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| carlyemail_toolkit-0.1.1.tar.gz | 12.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| carlyemail_toolkit-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.7 kB
Release files / carlyemail_toolkit-0.1.1.tar.gz
| Download URL | carlyemail_toolkit-0.1.1.tar.gz |
|---|---|
| Size | 12.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8bd607b9be9a0c4cd89f3b9689822aed9d66f2fb8059205eef520de2df54e82f
|
|
BLAKE2b-256 checksum How to use checksums |
aadf90b3d2171936649ff4ab9c734ba8b527dfb278f1f710a0f48056e8fe1779
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.3
|
Release files / carlyemail_toolkit-0.1.1-py3-none-any.whl
| Download URL | carlyemail_toolkit-0.1.1-py3-none-any.whl |
|---|---|
| Size | 16.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5dfef71b11acfee51c71111cf1f311283c04d1f2fa8e97179ae49573ce4c5bf4
|
|
BLAKE2b-256 checksum How to use checksums |
60a326220cce06a43b4bd9dce4baa6a608d0539c8ff36d02e4e0e51566aa154e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.3
|