charter-mcp, and it serves shipped packs over
the Model Context Protocol on stdio.
python the client finds on its PATH. With pip, the same command:
python -m charter.mcp is the same entry point, with the same flags.
charter-mcp
str
required
Which packs to serve. One or more of
gmail, gcalendar, gsheets, gdocs,
gdrive, gforms, slack, github, stripe, linear, shopify, firecrawl,
notion, granola, tavily, outlook, luma. Repeat the flag or comma-separate the names to serve
several from one server — --pack gmail --pack slack and --pack gmail,slack are
the same thing, order is the order you give, and a pack named twice is loaded once.
Anything else is rejected by the argument parser, which exits 2.Prefer one server over several: the key you configure it under is what a host
prefixes to every tool name, so one entry keeps the pack out of that prefix. See
MCP server.str
default:"charter"
The MCP server name reported to the client. Note that a host composes tool names
from the key the server is configured under, not from this — so changing it does
not change what the model sees.
flag
Offer a single
ToolSearch instead of every schema, and add tools as the model
asks for them, announcing each load with notifications/tools/list_changed.
Only for a client that re-lists on that notification and hands the new tools
to the model at once — Hermes Agent does; Codex, Claude Code and Google ADK
do not, in the ways the MCP page records.--no-progressive, which was how to get every schema before 0.2.6 made it
the default, is still accepted and does nothing.flag
Print usage and exit.
TOOLS, and the credential from
the environment — the packs read their documented
variable on first use, so no configure() call is needed here.
Every schema is in tools/list from the first request. With --progressive
the server holds a ToolSession instead:
the client is offered a single ToolSearch listing every tool by name, and
loading one emits notifications/tools/list_changed.
On start it writes one line to stderr, keeping stdout clear for the protocol:
--progressive the line ends (schemas on demand via ToolSearch).
Then it serves until the client disconnects. Missing the mcp extra raises
ImportError from the adapter import, which happens after the pack loads.
Configuring a client
Using it as a function
main and load_pack are importable, but charter.mcp is not part of the
public surface: it is the entry point, and the supported way to reach a pack’s
tools from your own code is the pack itself.
Related
- MCP server — every client’s config, what each does with
--progressive, and why a long-lived server needs a grant rather than a raw token - Adapters — the same tools as LangChain or OpenAI functions
- Configuration — the environment variables