Skip to main content
Charter installs no console script. There is one module entry point, and it serves a shipped pack over the Model Context Protocol on stdio.

python -m charter.mcp

str
required
Which pack to serve. One of gmail, gcalendar, gsheets, gdocs, gdrive, gforms, slack, github, stripe, linear, shopify, firecrawl, notion, granola, tavily. Anything else is rejected by the argument parser, which exits 2.
str
default:"the pack name"
The MCP server name reported to the client.
flag
Send every tool schema up front instead of loading them on demand. Use it with a client that ignores notifications/tools/list_changed.
flag
Print usage and exit.
The tools come from the pack’s TOOLS, and the credential from the environment — the packs read their documented variable on first use, so no configure() call is needed here. Schemas are sent on demand, through a ToolSession the server holds: the client is offered a single ToolSearch listing every tool by name, and loading one emits notifications/tools/list_changed so the client re-lists and sees it appear. On start it writes one line to stderr, keeping stdout clear for the protocol:
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.
  • MCP server — what the client sees, and why a raw token is the wrong credential for a long-lived server
  • Adapters — the same tools as LangChain or OpenAI functions
  • Configuration — the environment variables