DETRAN BA: Débitos
Server Details
DETRAN BA: Debts, official-source lookup. Platform-hosted, pay per query with prepaid credit.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- mcp-dir/detran_ba_debitos-mcp
- GitHub Stars
- 0
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.1/5 across 7 of 7 tools scored. Lowest: 3.4/5.
The set mixes one real domain tool with a cluster of platform-management tools—connect, authenticate, toolkit_info, and marketplace—whose boundaries overlap around connection status, accounts, and running MCPs. The marketplace tool especially conflates searching, installing, invoking, and reporting, making it hard for an agent to know which entry point to use.
There is no consistent naming convention: most tools are short English verbs or verb_noun pairs like connect, report_bug, and show_version, while the only domain tool is a long Portuguese underscore-heavier name, detran_ba_debitos_consultar. Mixed languages and inconsistent underscore usage make the tool surface feel fragmented.
Seven is not an extreme number, but six of the seven tools are generic platform infrastructure and only one actually fulfills the DETRAN debt consultation purpose. The count is therefore borderline: not bloated in raw volume, but conceptually top-heavy with meta tools and thin on domain-specific capabilities.
For a read-only DETRAN debt consultation tool, the core operation is covered by detran_ba_debit_consultar, and all base steps around authentication, connection, and marketplace billing are present. The main gaps are practical niceties like explicit wallet/balance visibility and post-query domain actions such as payment or receipt generation, but those may lie outside this server's intended scope.
Available Tools
7 toolsauthenticateAIdempotentInspect
MCP.AI for IDE agents (Cursor, etc.): log in in the browser, copy the access token. Best: add it to this server's config as a header Authorization: Bearer <token> for a permanent, non-expiring connection. Or paste it here for a session-only login: call with { token: "" } after the user pastes, or with no args to get the link.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false, and the description aligns with these. The description adds behavioral context beyond annotations: it explains that the token can be non-expiring if added to config, or session-only if pasted, and that calling with no args returns a link. It does not contradict annotations. It could mention that this is a write operation (setting credentials) but the idempotent hint covers that. The description adds useful context about the two modes of operation.
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 a single sentence but quite dense, covering multiple scenarios. It is front-loaded with the tool's purpose and then explains usage. It could be slightly more structured (e.g., separating the two modes), but it is efficient and every clause adds value. No wasted words.
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 complexity (two authentication modes, optional parameter, browser interaction), the description covers the key aspects: how to get the link, how to use the token, and the permanent vs session distinction. It lacks details about the return value (e.g., what the link looks like, success/failure responses), but there is no output schema, so the description could be more complete. However, for an authentication tool, the essential information is present.
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 must compensate. It does explain the 'token' parameter: it should be a JWT pasted by the user, and calling with no args is also valid. This adds meaning beyond the schema, which only defines 'token' as a string. The description clarifies the optional nature and the format (JWT). This is good compensation for the lack of schema descriptions.
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 tool's purpose: to authenticate an IDE agent by logging in via browser and obtaining an access token. It distinguishes itself from siblings by focusing on authentication, while siblings like 'connect' and 'marketplace' serve different functions. The verb 'authenticate' is specific and the resource (access token) is identified.
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 provides explicit usage guidance: it explains two ways to use the tool (permanent config-based token vs session-only token), when to call with no args to get the link, and when to call with a token. It also mentions the alternative of adding the token to the server's config, which is a clear alternative path. This is excellent guidance for an agent deciding how to invoke the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connectARead-onlyIdempotentInspect
Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns connect_url for the toolkit and per-install URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint and idempotentHint, but the description adds important behavioral details about the response structure. It explains the two possible outcomes and the meaning of the returned fields, which goes beyond what the annotations convey. It doesn't mention side effects (none expected) but provides a good picture of what the tool does.
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 two sentences long and highly concise. It packs the core behavior and conditional outcomes without any padding or redundancy. The structure is clean: first a general statement, then two specific conditional scenarios.
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 lack of an output schema, the description provides enough context by outlining the two key states and their associated fields. It mentions 'per-install URLs' but doesn't elaborate, though it's sufficient for understanding the tool. It could be more complete by describing the 'pending' array, but the main functionality is well covered.
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?
There are no parameters in the schema, so the description has nothing to add. Schema coverage is 100% (empty schema), placing the baseline at 3. The description doesn't elaborate on parameters because there are none, which is appropriate.
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 tool's purpose: it returns connection status and URLs. It provides concrete examples of the two possible states, which makes the function unambiguous. The phrase 'Returns connection status and URLs' is a specific verb+resource combination.
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 guides usage by explaining what happens when credentials are missing (returns connect_url) versus when all providers are connected (authenticated:true). It doesn't explicitly say 'use this to check connection status', but the behavior is clear enough to infer appropriate use cases. It differentiates from sibling tools like authenticate by focusing on status rather than initiating authentication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detran_ba_debitos_consultarBRead-onlyIdempotentInspect
DETRAN BA: Débitos, consulta em fonte oficial. Hospedado pela plataforma, sem credenciais da plataforma, pague por consulta com crédito pré-pago. Consulta informação de fontes e órgãos oficiais brasileiros (a mesma disponível ao cidadão), não é dado sigiloso. O cliente é o controlador dos dados e responde pela finalidade legítima (LGPD).
| Name | Required | Description | Default |
|---|---|---|---|
| chassi | No | ||
| renavam | No | ||
| login_cpf | Yes | ||
| login_senha | Yes | ||
| pkcs12_cert | No | ||
| pkcs12_pass | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context: cost per query, data from official Brazilian sources (not confidential), and LGPD compliance, which go beyond the annotations.
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 purpose is front-loaded in the first sentence, and subsequent sentences add relevant context (hosting, payment, data nature, legal). It is not overly verbose, though the LGPD disclaimer is somewhat tangential to tool invocation.
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?
With no output schema and no parameter descriptions, the tool is complex enough to require more detail. The description does not explain authentication requirements, the role of each parameter, or the response format, making it incomplete for an agent to invoke correctly.
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% and the description does not mention any of the six parameters (login_cpf, login_senha, chassi, renavam, pkcs12_cert, pkcs12_pass). No explanation of what these parameters are for, leaving the agent with no guidance on how to construct a valid request.
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 identifies the tool as a query for vehicle debts from DETRAN BA, using specific verb 'consulta' (query) and resource 'Débitos' (debts). It distinguishes from sibling tools which are platform utilities, not data lookups.
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?
Provides context such as official source, prepaid credit, and LGPD responsibility, but does not explicitly state when to use it versus alternatives. Since no sibling tools are similar, explicit exclusion may be less critical, but the description still lacks clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplaceAInspect
The official mcp.ai marketplace — the in-platform catalog of every MCP/tool, AND the way to run them. Covers capability requests like "find an MCP that does X", "consulta um CPF", "is there a tool for Y". Core flow: action=search discovers MCPs by intent → describe returns one MCP's full profile (every tool with its id + params, pricing, auth) so you pick the right tool_id → invoke RUNS that tool. KEY: invoke works even when the MCP is NOT installed — it runs the tool pontualmente (one-off), without adding the MCP to the toolkit and without bloating the tool list. If the MCP needs a credential/login, invoke returns a connect link; if it is paid and the wallet is empty, invoke returns a checkout/top-up link (the user opens it, then you retry). Use install only to make an MCP PERMANENT in the active toolkit (its tools then show up natively in future sessions); prefer invoke for a single/occasional use. list_tools lists what is callable right now. subscribe/cancel handle per-MCP billing; report_bug sends feedback; request_mcp asks us to build a NEW MCP when nothing fits. Search/describe flag installed_in_toolkit vs installed_in_workspace. Writes (install/uninstall/subscribe/cancel and the one-off install behind invoke) require workspace owner/admin. It also carries the mcp.ai PROMPT LIBRARY, which is about ready-made prompt TEXT rather than MCPs: search_prompts finds one, get_prompt returns its full text with {{variables}} filled, and publish_prompt saves a prompt and returns a shareable mcp.ai/p/ link that opens without login.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| action | No | search | |
| mcp_id | No | ||
| message | No | ||
| tool_id | No | ||
| arguments | No | {} | |
| immediate | No | ||
| tier_slug | No | ||
| prompt_body | No | ||
| prompt_slug | No | ||
| prompt_tool | No | ||
| prompt_vars | No | {} | |
| conversation | No | [] | |
| prompt_title | No | ||
| request_name | No | ||
| cancel_reason | No | ||
| cancel_comment | No | ||
| prompt_targets | No | ||
| report_context | No | ||
| prompt_category | No | ||
| request_details | No | ||
| prompt_description | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: invoke runs tools even if not installed, returns connect/checkout links when needed, requires owner/admin for writes, and flags installed status. These details add significant context that the annotations (readOnlyHint=false, openWorldHint=true, etc.) do not provide, and there is no contradiction.
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 long but structured around a clear core flow, then key notes and the prompt library. Every sentence adds practical value, and the information density is appropriate for a tool with 14 actions and 23 parameters.
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?
For a complex multi-action tool with no output schema, the description covers almost all workflows: discovery, profiling, invocation, installation, billing, permissions, error/retry flows, and the prompt library. It is comprehensive enough for an agent to select and invoke the correct action in most situations.
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?
With 0% schema coverage, the description compensates well by explaining the action parameter's enum values, the role of tool_id and arguments in the invoke flow, and prompt-related parameters such as prompt_slug and prompt_vars. However, some parameters like limit, immediate, tier_slug, and cancel_reason are not explicitly documented, leaving minor gaps.
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 identifies the tool as the official mcp.ai marketplace for discovering and invoking MCPs/tools, and also covers the prompt library. It uses specific verbs (search, describe, invoke, install) and distinguishes it from sibling tools like authenticate or report_bug by outlining its unique scope.
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 gives explicit usage guidance: the core search→describe→invoke flow, when to use invoke vs install (prefer invoke for one-off, install for permanent), and how to handle auth/checkout links with a retry. It also differentiates request_mcp from report_bug and explains the prompt library actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_bugAIdempotentInspect
Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | ||
| message | Yes | ||
| conversation | No | [] |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose what happens upon reporting (e.g., data transmission, side effects, or confirmation). Annotations clarify it's non-read-only and idempotent, but the description adds no behavioral detail beyond the instruction to include the conversation. For a tool that sends data, this lacks 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?
Two sentences, front-loaded with purpose and followed by a specific usage instruction. No fluff or redundant information, making it highly efficient for its length.
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?
The tool has no output schema, minimal annotations, and the description omits return behavior, side effects, and meaning of two parameters. It is not complete for a 3-parameter tool; the agent cannot fully anticipate the interaction or validate inputs.
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?
With 0% schema description coverage, the description is the sole source for parameter meaning. It only explains the 'conversation' parameter (for reproduction) but leaves 'message' and 'context' undefined, and the required 'message' field is not even mentioned. This under-specifies the inputs.
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 tool reports a bug, missing feature, or feedback, with a specific verb ('report') and target resource. It is distinct from sibling tools like 'detran_ba_debitos_consultar' (query) and 'marketplace' (browse), making its purpose unambiguous.
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?
It gives an explicit instruction to include the conversation array for reproduction, which is a clear usage context. However, it does not explicitly state when not to use this tool or mention alternatives, though no sibling appears to serve the same function, making this a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_versionARead-onlyIdempotentInspect
Show the current MCP platform and adapter versions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds specific context about what is shown ('MCP platform and adapter versions'), which is useful. It does not contradict annotations and adds minimal additional 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?
The description is a single, well-structured sentence that immediately states the tool's function. 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?
For a simple version-query tool with no output schema and comprehensive annotations, the description is complete. It states what the tool does and the scope (platform and adapter versions), which is sufficient for selection and invocation.
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 tool has 0 parameters, and the schema has no properties. Per the rubric, the baseline for 0 parameters is 4, and the description does not need to explain parameters.
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 tool's purpose: 'Show the current MCP platform and adapter versions.' It uses a specific verb ('Show') and resource ('versions'), and this is distinct from sibling tools like authenticate, connect, or report_bug.
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 given on when to use this tool versus alternatives. Since the tool is self-explanatory and no similar siblings exist, the usage is implied but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toolkit_infoARead-onlyIdempotentInspect
Returns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds value by detailing exactly what the returned state contains (installed MCPs, connection status, accounts, catalog tool counts), which goes beyond the annotations and informs the agent about the tool's output content.
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 a single, well-structured sentence that lists all return components without redundancy. It is front-loaded with the verb and resource, and every phrase 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?
For a zero-parameter, read-only info tool with no output schema, the description sufficiently explains the tool's purpose and return content. It covers what is returned, but could be slightly more explicit about the format or any additional details, though for this simple tool it is largely complete.
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 tool has zero parameters, so baseline per instructions is 4. The description doesn't need to add parameter explanations since there are none. Schema coverage is trivially 100% with no properties.
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 verb 'Returns' and the resource 'current toolkit state', then enumerates the specific components: installed MCPs, connection status, accounts, and catalog tool counts. This precisely distinguishes it from siblings like 'connect' or 'authenticate' which are action-oriented, not inspection tools.
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 provides clear context about what the tool does (returns current state) but does not explicitly state when to use it versus alternatives. Since it is a read-only inspection tool, its purpose is evident from the description, but there are no explicit when/when-not conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- Alicense-qualityCmaintenanceA hosted read-only MCP server that enables querying IPVA (vehicle property tax) information from the official SEFAZ Bahia source, with prepaid credit-based usage and no platform credentials.MIT
- Alicense-qualityCmaintenanceMCP server for consulting SEFAZ BA IPVA Notificado (vehicle tax) data from official sources. Read-only, works with any MCP client, pay-per-use with prepaid credits.MIT
- -license-quality-maintenanceEnables querying DETRAN RJ IPVA DARJ (vehicle tax) information from official sources via a read-only MCP server, with prepaid per-query credits.
- Alicense-qualityCmaintenanceEnables consulting and issuing IPVA guides for Bahia state (Brazil) directly from the official SEFAZ BA source, with a read-only tool.MIT