Monta MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Monta MCP Servershow me my charging points"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Monta MCP Server
An MCP (Model Context Protocol) server that wraps the Monta Python SDK to provide LLM-friendly access to the Monta EV charging API.
Features
This MCP server exposes the following tools for interacting with Monta's EV charging platform:
Architecture Highlights
Efficient session management: Uses FastMCP's lifespan pattern to maintain a single persistent aiohttp session
Connection pooling: Reuses HTTP connections across all tool invocations for optimal performance
Type-safe context: All tools access shared resources through strongly-typed lifespan context
Proper cleanup: Automatically closes sessions on server shutdown
Robust error handling: State-changing operations include input validation, timeout protection (10s), and comprehensive error logging
Charge Point Management
get_charge_points- List all available charging stations with paginationget_charge_point- Get detailed information about a specific charging station
Charging Operations
get_charges- View charging history/sessions with filtering optionsstart_charge- Start a charging session at a specific charge pointstop_charge- Stop an active charging session
Wallet & Payments
get_personal_wallet- View wallet balance and payment informationget_wallet_transactions- Get transaction history with filtering
Related MCP server: pumperly-mcp
Prerequisites
Python 3.11 or higher
Monta API credentials (client ID and client secret)
uvpackage manager (recommended) orpip
Installation
Using uv (recommended)
git clone <repository-url>
cd monta-mcp
uv syncUsing pip
git clone <repository-url>
cd monta-mcp
pip install -e .Configuration
The server requires Monta API credentials set as environment variables:
export MONTA_CLIENT_ID="your_client_id"
export MONTA_CLIENT_SECRET="your_client_secret"Getting Monta public API Credentials
Visit Monta Public API Portal and follow the guide
Usage
Running the Server
The server can be run directly:
# Using the installed script (default log: ./monta-mcp.log)
monta-mcp
# With custom log file location
monta-mcp --log-file /path/to/custom.log
# With custom log level
monta-mcp --log-level DEBUG
# Or using Python module
python -m monta_mcpCommand-line Options:
--log-file PATH- Path to log file (default:./monta-mcp.log)--log-level LEVEL- Logging level: DEBUG, INFO, WARNING, ERROR (default: INFO)
Testing with MCP Inspector
You can test the server using the MCP Inspector tool:
npx @modelcontextprotocol/inspector monta-mcpThis will open a web interface where you can:
View all available tools
Test tool calls with different parameters
See responses from the Monta API
Integrating with Claude Desktop
Add this configuration to your Claude Desktop config file:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"monta": {
"command": "monta-mcp",
"env": {
"MONTA_CLIENT_ID": "your_client_id",
"MONTA_CLIENT_SECRET": "your_client_secret"
}
}
}
}Or if using uv:
{
"mcpServers": {
"monta": {
"command": "uv",
"args": ["run", "monta-mcp"],
"env": {
"MONTA_CLIENT_ID": "your_client_id",
"MONTA_CLIENT_SECRET": "your_client_secret"
}
}
}
}With custom log location:
{
"mcpServers": {
"monta": {
"command": "uv",
"args": ["run", "monta-mcp", "--log-file", "/Users/you/logs/monta.log"],
"env": {
"MONTA_CLIENT_ID": "your_client_id",
"MONTA_CLIENT_SECRET": "your_client_secret"
}
}
}
}After adding the configuration, restart Claude Desktop. The Monta tools will be available in your conversations.
Example Usage in Claude
Once configured, you can ask Claude things like:
"Show me all my charging points"
"Get details for charge point 12345"
"What's my recent charging history?"
"Check my wallet balance"
"Start charging at station 12345"
Available Tools
7 toolsget_charge_pointA
Get detailed information about a specific charging point.
Args:
charge_point_id: The ID of the charge point to retrieve
Returns:
Charge point details dictionary
| Name | Required | Description | Default |
|---|---|---|---|
| charge_point_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It states it returns a dictionary, but lacks details on auth needs, error conditions, side effects, or data completeness. Minimal transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one sentence for purpose, one for parameter, one for return. No wasted words, front-loaded with the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given low complexity (1 param, no output schema, no nested objects), the description is minimally adequate but incomplete. It does not specify what 'charge point details' include, leaving ambiguity about return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It adds meaning for the single parameter (charge_point_id: The ID) but does not explain format, constraints, or range beyond schema type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get detailed information about a specific charging point' using a specific verb and resource. It distinguishes from sibling tools like get_charge_points (plural list) by specifying single item retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a charge_point_id is known, but does not provide explicit guidance on when to use this tool versus alternatives (e.g., get_charge_points for listing) or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_charge_pointsA
Get a list of available EV charging points/stations.
Args:
page: Page number for pagination (1-indexed, default: 1)
per_page: Number of items per page (default: 10, min: 1, max: 100)
Returns:
List of charge point dictionaries
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| per_page | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes pagination parameters and return type (list of dicts), but doesn't state read-only behavior, scope of available points, or idempotency. No annotations exist to compensate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, structured with Args/Returns sections. Front-loaded purpose, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with 2 optional params and output schema present. Description covers essentials; missing only minor behavioral notes like read-only hint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but description fully explains both parameters (page, per_page) with defaults and constraints, adding value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb-resource pair: 'Get a list of available EV charging points/stations.' Distinct from siblings like get_charge_point (singular) and get_charges (charging sessions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like get_charge_point or get_charges. No prerequisites or context provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chargesA
Get charging history/sessions for a charge point.
Args:
charge_point_id: The ID of the charge point
from_date: Filter charges from this date (ISO format, optional)
to_date: Filter charges to this date (ISO format, optional)
state: Filter by charge state (e.g., 'completed', 'active', optional)
page: Page number for pagination (1-indexed, default: 1)
per_page: Number of items per page (default: 10, min: 1, max: 100)
Returns:
List of charge session dictionaries
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| state | No | ||
| to_date | No | ||
| per_page | No | ||
| from_date | No | ||
| charge_point_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavior. It mentions 'Get' (read operation) and lists parameters but does not explicitly state read-only nature, order of results, or error conditions. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured with a clear first-line purpose, followed by an Args section with each parameter on a separate line, and a Returns section. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters and an existing output schema, the description covers parameter semantics and return type adequately. It lacks explanation of ordering or error behavior, but pagination is addressed via parameters. Sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (JSON schema properties lack descriptions). The description compensates by listing all 6 parameters with types, defaults, and semantic hints (e.g., 'ISO format', '1-indexed', min/max for per_page). This adds significant meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get charging history/sessions for a charge point,' which is a specific verb-resource combination. It distinguishes this tool from siblings like 'get_charge_point' (single point details) and 'start_charge' (action).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates use for retrieving history of a specific charge point, but does not explicitly state when to use or avoid this tool compared to alternatives. It provides clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_personal_walletA
Get personal wallet information including balance and payment details.
Returns:
Wallet details dictionary
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states it returns a dictionary, with no disclosure of side effects, authentication, or rate limits. Minimal behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus a returns line. No fluff, front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations. Description mentions balance and payment details but does not specify the structure. Adequate but not complete for a simple get tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is 100%. Description adds context about what is returned (balance, payment details) but adds no parameter-specific semantics beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Get' and specific resource 'personal wallet information' with examples (balance, payment details). Distinct from sibling tools like get_charge_point or get_wallet_transactions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives. Usage is implied by the name and description, but no guidance on when to choose this over sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wallet_transactionsA
Get wallet transaction history with optional filtering.
Args:
from_date: Filter transactions from this date (ISO format, optional)
to_date: Filter transactions to this date (ISO format, optional)
page: Page number for pagination (1-indexed, default: 1)
per_page: Number of items per page (default: 10, min: 1, max: 100)
Returns:
List of transaction dictionaries
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| to_date | No | ||
| per_page | No | ||
| from_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It explains parameter roles (date filtering, pagination) but omits details like ordering, error handling, or what happens when from_date > to_date. Adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise docstring format with clear sections (Args, Returns). Front-loaded with purpose sentence. No fluff, every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given optional filtering and pagination, the description covers key input details and return type. Absence of output schema is noted but context says output schema exists, so return description is sufficient. Could mention sorting or limits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but description adds meaningful explanations for each parameter (e.g., ISO format for dates, pagination defaults). Compensates well for lack of schema descriptions, though could specify date format more precisely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get wallet transaction history with optional filtering', using a specific verb and resource. It distinguishes well from sibling tools like charge-related ones, as wallet transactions are a distinct domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives provided. The description implies usage for retrieving transaction history with optional filters, but lacks guidance on when to prefer this over other tools or pagination scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_chargeC
Start a charging session at a specific charge point.
Args:
charge_point_id: The ID of the charge point to start charging
Returns:
Charge session details dictionary or error response
| Name | Required | Description | Default |
|---|---|---|---|
| charge_point_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavior. It only states the basic action without mentioning side effects (e.g., billing, availability changes), error states, or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is brief and to the point, with a clear first sentence. The Args/Returns section is acceptable but could be omitted or integrated concisely. No wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (1 param) and lack of output schema, the description is incomplete. It vaguely mentions 'Charge session details dictionary or error response' without specifics. No info on idempotency, timeouts, or pairing with stop_charge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds some meaning to the single parameter 'charge_point_id' by describing its purpose ('The ID of the charge point to start charging'), which is absent from the schema (0% coverage). However, it lacks details on format, constraints, or valid values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Start a charging session') and the resource ('at a specific charge point'), distinguishing it from sibling tools like stop_charge and get_* tools. However, it lacks specificity about the exact outcome or preconditions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor any prerequisites or when-not-to-use conditions. This leaves the agent without decision context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_chargeA
Stop an active charging session.
Args:
charge_id: The ID of the charge session to stop
Returns:
Charge session details dictionary or error response
| Name | Required | Description | Default |
|---|---|---|---|
| charge_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must convey behavioral traits. It mentions stopping an active session and returning either details or an error response. However, it does not disclose prerequisites (e.g., authorization), side effects, or what happens if the charge_id is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: one line for purpose, then a clear list of arguments and return values. Every sentence is essential and there is no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is mostly complete. It covers the action, argument, and return type. It could be enhanced by clarifying that the charge must be active or by noting potential error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema defines only the type and required status for charge_id. The tool description adds meaning by explaining that it is 'The ID of the charge session to stop'. This is helpful since schema coverage is 0%. However, it lacks guidance on how to obtain the ID or format constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name 'stop_charge' and description 'Stop an active charging session' clearly indicate the action (stop) and resource (charging session). It is easily distinguished from siblings like 'start_charge' and 'get_charges'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool should be used to stop currently active charging sessions. It does not explicitly state when not to use it (e.g., if already stopped) or mention alternatives, but the context from sibling names provides enough clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
get_charge_point - First observed
get_charge_points - First observed
get_charges - First observed
get_personal_wallet - First observed
get_wallet_transactions - First observed
start_charge - First observed
stop_charge
TDQS
Scored across 7 tools
Every tool has a clearly distinct purpose: charge point listing vs detail, charging actions vs history, and wallet operations. No overlap or ambiguity.
All tools follow a consistent verb_noun pattern with snake_case (e.g., get_charge_points, start_charge). No mixed conventions.
7 tools is well-scoped for an EV charging server, covering station info, session management, and financials without excess.
Core workflows are covered: listing/detailing stations, starting/stopping charges, viewing history, and wallet. Minor gap: no tool to get current charging status directly, but filterable in history.
Maintenance
Related MCP Connectors
An MCP server that provides an API to LLMs to manage their JumpCloud resources.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Hosted MCP server for LLM cost estimation, model comparison, and budget-aware routing.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Related MCP Servers
AlicenseNot gradedqualityBmaintenanceMCP server providing tools for AI-agents to interact with Enapter EMS.Apache 2.0- AlicenseAqualityAmaintenanceMCP server that exposes any Pumperly instance to LLMs, enabling real-time fuel price queries, station search, route planning, and geocoding.5433GPL 3.0
- AlicenseNot gradedqualityDmaintenanceMCP server for interacting with QUADS infrastructure systems via API, enabling resource management and automation through LLM applications.MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for the OCPI SDK that enables AI-assisted communication with EV charging infrastructure via the Open Charge Point Interface protocol.303Apache 2.0