mysql-legacy-mcp
Provides SELECT-only querying and SHOW-based schema inspection (list databases, tables, columns, indexes, and show create table) for legacy MySQL 5.0–5.6 deployments.
Click on "Install 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., "@mysql-legacy-mcpshow the columns of the orders table"
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.
mysql-legacy-mcp
MCP queries and schema inspection for legacy MySQL 5.0–5.6 deployments, built around MySQL 5.1-compatible SQL.
Compatibility across this range is not yet verified. This server uses mysql (mysqljs), SHOW metadata queries, and a SELECT-only tool interface. It does not expose old-password authentication, custom charset, or TLS options.
Is this for you?
Your MySQL MCP server fails or hangs when connecting to MySQL 5.1 or 5.5.
Schema inspection expects newer
information_schemafields, JSON functions, or transaction features your database lacks.You need to inspect a legacy ERP, CRM, or application database without exposing a write tool.
You found
ER_NOT_SUPPORTED_AUTH_MODE, “Client does not support authentication protocol requested by server”, or “Old password authentication is not supported”. Read the limitations below: switching to this package is not a guaranteed fix.You are looking for
insecureAuth, working withlatin1/cp1251, or diagnosing an old MySQL TLS handshake. These are relevant limitations, not implemented features.
The error phrases above are diagnostic search terms, not a record of failures reproduced by this project.
Related MCP server: MCP MySQL Server
MySQL compatibility
No live test results are recorded in this repository. A live smoke script exists; its presence is not evidence that a version passed.
MySQL version | Status | Basis and limitations |
5.0 | Untested; likely compatible with appropriate authentication | Built-in tools use older SELECT / SHOW syntax. No patch-level verification; pre-4.1 password authentication is disabled. |
5.1 | Intended target; live verification pending | Original implementation targets 5.1. Exact version, authentication, and encoding results need recording. |
5.5 | Untested; likely compatible | No newer server features required by built-in tools; same authentication and transport limits. |
5.6 | Untested; likely compatible | Same SQL approach; user-supplied queries must still suit the server. |
There is no version negotiation or SQL rewriting. mysql_legacy_ping reports VERSION(); it does not enable version-specific behavior. Modern authentication such as caching_sha2_password is outside this package's intended scope.
How it compares
Server | Minimum supported MySQL version | Focus |
| Not established by live tests; targets 5.0–5.6 | SELECT-only tools and SHOW-based schema inspection; no TLS or auth configuration |
| 5.7+; 8.0+ recommended | Broader features including TLS, SSH tunneling, and optional writes |
Based on the other project's requirements, reviewed on 2026-09-09. This is not a benchmark or a claim about every MySQL MCP server.
Installation and Quick Start
Requires Node.js >=18.14.1 and npm. Use a currently maintained Node.js release for deployment. This is a local stdio MCP server: your client launches it as a child process.
The npm commands below are for the first published release. Until then, run npm ci in this checkout and configure your client to launch node with the absolute path to src/server.js.
Use a dedicated database account with only the needed SELECT and metadata access. Do not grant FILE, EXECUTE, or write privileges. Results are sent to your AI client. The database connection is unencrypted TCP: use a trusted local connection or an independently secured tunnel.
Claude Code
Replace the example values. The command stores credentials in client configuration and may leave them in shell history; use the client's secret handling where available.
claude mcp add --transport stdio mysql-legacy --env MYSQL_LEGACY_HOST=127.0.0.1 --env MYSQL_LEGACY_USER=legacy_reader --env MYSQL_LEGACY_PASSWORD=replace-with-a-secret --env MYSQL_LEGACY_DATABASE=legacy_app -- npx -y mysql-legacy-mcpRestart Claude Code, then ask it to call mysql_legacy_ping. Claude Code MCP documentation.
Cursor
Merge into project .cursor/mcp.json or user ~/.cursor/mcp.json. Keep real credentials out of version control.
{
"mcpServers": {
"mysql-legacy": {
"type": "stdio",
"command": "npx",
"args": ["-y", "mysql-legacy-mcp"],
"env": {
"MYSQL_LEGACY_HOST": "127.0.0.1",
"MYSQL_LEGACY_USER": "legacy_reader",
"MYSQL_LEGACY_PASSWORD": "replace-with-a-secret",
"MYSQL_LEGACY_DATABASE": "legacy_app"
}
}
}
}Restart Cursor after saving. Cursor MCP documentation.
For Claude Desktop, Codex, VS Code, Windsurf, Gemini CLI, OpenCode, Qwen Code, and other clients, see the installation guide.
Configuration reference
Set variables on the MCP server process. The server does not read .env files itself. Empty values are treated as absent; an empty password is not accepted.
Variable | Default | Meaning |
| Required | Database host or local tunnel endpoint |
|
| TCP port, 1–65535 |
| Required | Dedicated reader account |
| Required | Nonempty account password |
| Unset | Optional default database for SELECT queries |
|
| Hide mysql and information_schema in listings; true / false |
|
| Driver query timeout, 100–60000 ms |
|
| SELECT response row limit, 1–1000 |
|
| SELECT row-data JSON byte limit, 1024–1048576 |
Connection timeout is fixed at 10 seconds. There are no MYSQL_LEGACY_INSECURE_AUTH, MYSQL_LEGACY_CHARSET, or MYSQL_LEGACY_SSL settings; supplying them has no effect.
Tools and limits
Tool | SQL / behavior |
|
|
| One parsed SELECT statement |
|
|
|
|
|
|
|
|
|
|
The SELECT tool rejects parse failures, multiple statements, non-SELECT statements, SELECT INTO, and locking reads. The driver also disables multiple statements. Schema identifiers are quoted and reject control characters and semicolons.
These filters are not a database authorization boundary: SELECT expressions can call functions, acquire locks, or consume resources. Database privileges remain essential. The default database is not an allowlist, and hiding system databases is only a display filter.
SELECT responses include rows, returnedRows, totalRows, and truncated. Limits apply after the full result has been fetched into memory, and exclude the MCP envelope; they do not bound database work or memory use. Schema results are not row/byte capped. Use selective queries with explicit LIMIT. The driver timeout is not a server-side execution budget.
Troubleshooting
ER_NOT_SUPPORTED_AUTH_MODE / Client does not support authentication protocol requested by server
Check the exact MySQL version and account authentication with your DBA. This package uses mysql@2.18.1, not mysql2; changing package names alone does not make every authentication mode compatible. Diagnose with a dedicated reader account.
Old password authentication is not supported / HANDSHAKE_INSECURE_AUTH
Pre-4.1 old_password authentication and mysql_native_password differ. The mysqljs driver's insecureAuth defaults to false, and this server does not expose it. A DBA must provision a compatible dedicated account, or a separate implementation change is needed. See mysqljs connection options.
TLS / SSL handshake errors with old MySQL
This server does not configure TLS. It cannot satisfy an account requiring SSL or repair legacy TLS negotiation. Use an independently secured connection appropriate to your deployment; do not expose the plaintext database connection to an untrusted network.
latin1, cp1251, garbled text, or utf8mb4 errors
The driver defaults to UTF8_GENERAL_CI, avoiding an utf8mb4 connection request to older servers. This is not custom legacy-encoding support. Verify stored encodings and server conversion using representative text. There is no configurable connection charset. See mysqljs 2.18.1 defaults.
MCP server hangs, disconnects, or tools do not appear
The process waits for MCP messages on stdin; silence in a terminal is normal. Check client logs (stderr), Node/npm availability, and the command. Database connections happen on tool calls: successful tool discovery does not prove database reachability. Call mysql_legacy_ping first. Initial npx startup needs registry access to download dependencies.
Missing required environment variable: MYSQL_LEGACY_...
Set the variable in the client's server environment. A separate terminal's variables may not reach the client. MYSQL_HOST, MYSQL_PASS, and MYSQL_DB do not configure this package. Restart after changes.
SQL parsing failed / Exactly one SELECT statement is allowed
The MySQL parser may reject otherwise valid legacy syntax; there is no unrestricted fallback. Use schema tools for SHOW queries. Passing the parser does not guarantee validity on your MySQL version.
Codex does not load a copied JSON configuration
Codex uses TOML with mcp_servers; VS Code uses JSON with servers; OpenCode uses mcp and environment. Follow INSTALLATION.md.
Why this exists
This project grew out of a QA/fullstack workflow needing AI-assisted inspection of a production MySQL 5.1 database. Metadata queries avoid requiring SET TRANSACTION READ ONLY, CTEs, or MySQL JSON features. It is a small utility for inspecting existing databases and preparing migrations.
Contributing
From a checkout, run npm ci, then:
npm run check
npm run smoke:staticFor a database you are authorized to inspect, set the connection variables plus MYSQL_LEGACY_DATABASE and MYSQL_LEGACY_SMOKE_TABLE, then run npm run smoke:live. Record the exact version, authentication, encodings, and results; redact credentials and application data. The existing live script reads metadata and performs a constant SELECT; it does not test MCP transport, index listing, or a SELECT against an application table.
Include a minimal reproducer with compatibility reports. Tie new compatibility claims to recorded evidence.
License
MIT.
Available Tools
7 toolsmysql_legacy_describe_tableC
Lists columns with SHOW FULL COLUMNS FROM .. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description is the only source of behavior. It states read-only, which is helpful, but lacks details like whether it requires specific privileges or what the output format is.
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?
Very concise, one sentence front-loaded with intent. No wasted words, though it could be slightly more detailed within the same space.
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 tool with no annotations, no output schema, and minimal parameter documentation, this description is incomplete. It fails to mention output structure, prerequisites, or any edge cases.
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 explain the parameters beyond naming them. An agent gets no additional meaning for database or table beyond their names.
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 lists columns via SHOW FULL COLUMNS for a specified database and table, distinguishing it from siblings like list_tables and show_create_table.
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 versus alternatives. It implies use for column information, but doesn't contrast with show_create_table or list_indexes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysql_legacy_list_databasesA
Lists databases using SHOW DATABASES. System databases are hidden by default according to MYSQL_LEGACY_HIDE_SYSTEM_DATABASES.
| Name | Required | Description | Default |
|---|---|---|---|
| include_system_databases | No | Overrides MYSQL_LEGACY_HIDE_SYSTEM_DATABASES for this call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It discloses a key behavior beyond the name: system databases are hidden by default based on MYSQL_LEGACY_HIDE_SYSTEM_DATABASES. This gives useful context about filtering behavior, though it does not explicitly state read-only semantics or output shape.
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 short sentences with no filler. The core operation is front-loaded, followed by the important default-filtering behavior. Every sentence contributes meaningful 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 optional-boolean list tool, the description is largely complete: it names the operation, the SQL method, and the default behavior. The lack of an output schema is not a major issue since listing databases implies returning database names, but explicit mention of response format would make it fully 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 single parameter is fully documented in the schema, so schema description coverage is 100%. The description does not need to re-explain the parameter, but it also does not add extra semantic value beyond what the schema already provides. Baseline 3 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 operation: 'Lists databases using SHOW DATABASES.' It names a specific verb, resource, and even the underlying MySQL command. The resource 'databases' inherently distinguishes it from sibling tools like mysql_legacy_list_tables.
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?
Usage is implied by the verb and resource: use this when you need to list databases. However, there is no explicit guidance about when to prefer this tool over alternatives, nor any mention of exclusions or prerequisites. The description does not route users away from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysql_legacy_list_indexesA
Lists indexes with SHOW INDEX FROM .. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Because annotations are absent, the description is the sole source of behavioral information. It explicitly labels the tool as read-only and reveals the exact SQL syntax, which is useful. However, it does not disclose authorization requirements, error behavior, or the type of result rows returned, leaving a partial outlook.
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 that front-loads the action and the underlying SQL, ending with a useful safety note. There is no filler or repetition.
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 tool with only two required parameters and no output schema, the description covers the basic invocation and reveals the SQL command. It doesn't describe the exact result structure of SHOW INDEX or error conditions, but it is enough for the agent to select and call it 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?
The schema has zero description coverage, so the description must compensate. It clearly maps the parameters to the placeholders in the SHOW INDEX statement (<database> and <table>), giving useful meaning beyond the raw schema types. It doesn't describe how the parameters behave for special cases, but it suffices for basic usage.
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 states a specific verb ('Lists') and resource ('indexes from a table') and gives the exact SQL command ('SHOW INDEX FROM <database>.<table>'), making it clearly distinguishable from sibling tools like list_tables or describe_table.
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 instead of alternatives. It offers no mention of when the SQL or when to prefer describe_table or show_create_table. The read-only flag implies safe use but not actionable direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysql_legacy_list_tablesA
Lists base tables and views with SHOW FULL TABLES FROM . Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explicitly discloses that the operation is read-only and names the exact SQL command, which is significant behavioral context for a tool. It doesn't discuss permission requirements or output details, but for a simple SHOW command this is reasonably transparent.
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 short sentences with no filler. The primary action is front-loaded, the SQL semantics are compactly included, and the read-only trait is crisply stated. Every word earns its place.
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 one-parameter listing tool with no output schema, the description is nearly complete: it says what is listed, how it is listed, and the database source. It could add a little more about output shape or permission behavior, but SHOW FULL TABLES is a well-known operation and the given context is sufficient in practice.
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 input schema provides only the 'database' string with min/max length and no description. The description's command template 'FROM <database>' clearly indicates that the parameter is the database whose tables should be listed, adding meaning beyond the bare schema. For a single obvious parameter this is sufficient compensation.
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?
States a specific verb ('Lists'), a precise resource ('base tables and views'), and the implementation approach ('SHOW FULL TABLES FROM <database>'). This clearly distinguishes it from siblings like mysql_legacy_list_databases, mysql_legacy_describe_table, or mysql_legacy_ping.
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 intended usage is implied by the description: use this to enumerate tables/views in a given database. However, there is no explicit guidance about when to prefer this over sibling tools or any exclusions, leaving the agent to infer the decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysql_legacy_pingA
Checks the legacy MySQL connection with SELECT VERSION() AS version. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without any annotations, the description carries the full burden and does well by stating it is read-only and revealing the exact query. It does not elaborate on error handling or response format, but for a simple ping that is acceptable.
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 concise sentence with no filler. The core purpose and read-only nature are front-loaded, making it efficient and easy to parse.
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 ping tool, the description is sufficient. It specifies the action and the read-only nature, and the query implies a version result. It does not explicitly describe the return format, but that is minor for this simple 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?
There are zero parameters and schema coverage is 100%, so no parameter explanation is needed. The description adds nothing about parameters, but that is appropriate given the tool takes none.
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 checks the legacy MySQL connection and specifies the exact query used. This distinguishes it from sibling tools that handle data operations (select, list, etc.), 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?
The description makes it obvious this is for connectivity verification, and since siblings are all data operations, there is no confusion about when to use it. However, it does not explicitly contrast with alternatives or state exclusions, so a perfect score is not warranted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysql_legacy_selectA
Executes exactly one read-only SELECT statement. SELECT INTO and locking reads are rejected; results are limited by MYSQL_LEGACY_MAX_ROWS and MYSQL_LEGACY_MAX_RESULT_BYTES.
| Name | Required | Description | Default |
|---|---|---|---|
| sql | Yes | One MySQL 5.1-compatible SELECT statement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses read-only behavior, rejects SELECT INTO and locking reads, and names result limits. It could also explain what happens when a limit is exceeded, but the core safety and constraints are transparent.
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 tightly written sentences with the main action front-loaded. Every clause adds useful constraint information, with no filler or repetition.
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 one-parameter read-only tool, the description covers the key invocation constraints and safety behavior. There is no output schema, and the description does not specify the return shape or limit-exceeded behavior, but this is a minor gap given the tool's simplicity.
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 already fully documents the single sql parameter. The description adds context about read-only and compatibility but does not meaningfully extend parameter-level semantics 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?
The description states a specific verb ('Executes'), a precise resource ('exactly one read-only SELECT statement'), and the key scoping rule. This clearly distinguishes it from sibling metadata tools like mysql_legacy_list_tables or mysql_legacy_describe_table.
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 makes clear this tool is for executing SELECT queries, while the sibling names cover connectivity, listing, and schema inspection. It does not explicitly name alternatives or exclusions, but the context is sufficient for an agent to choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mysql_legacy_show_create_tableA
Returns the definition from SHOW CREATE TABLE .. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| table | Yes | ||
| database | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the important read-only trait and the fact that a definition is returned. However, it does not describe the return format, behavior for missing tables, or permission requirements, leaving the agent with a minimal but not complete behavioral picture.
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 efficient sentence, front-loads the main purpose, and appends the read-only caveat. There is no filler, repetition, or unnecessary detail.
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 low-complexity read-only tool, the description covers the essential purpose, parameter positions, and safety trait. However, it omits the return type/structure and any sibling-selection guidance, so an agent may be uncertain about how to interpret the result or when to prefer this over describe_table.
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 this well by embedding both parameters in the SHOW CREATE TABLE <database>.<table> pattern, clarifying their roles and ordering. For two simple string parameters, this is sufficient, though it adds no extra constraints or formats.
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 action ('Returns the definition'), the exact resource (SHOW CREATE TABLE for a given database.table), and marks the operation as read-only. This makes it easy to distinguish from sibling tools like mysql_legacy_describe_table or mysql_legacy_select even without explicitly naming them.
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 such as mysql_legacy_describe_table, mysql_legacy_list_tables, or mysql_legacy_list_indexes. The SQL command name implies a use case, but the description does not state it explicitly or provide any exclusions.
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. Dates show when Glama detected each change.
7 tool updates
v0.1.0- First observed
mysql_legacy_describe_table - First observed
mysql_legacy_list_databases - First observed
mysql_legacy_list_indexes - First observed
mysql_legacy_list_tables - First observed
mysql_legacy_ping - First observed
mysql_legacy_select - First observed
mysql_legacy_show_create_table
TDQS
Scored across 7 tools
Each tool has a distinct, non-overlapping purpose: ping for connectivity, select for queries, and the rest for metadata (databases, tables, columns, DDL, indexes). There is no ambiguity between tools, and an agent can reliably choose the right one.
All tools follow the exact same 'mysql_legacy_' prefix with a verb_noun pattern (select, list_databases, describe_table). The naming is predictable, consistent, and adheres to a single convention, making it easy to infer functionality.
Seven tools is a well-scoped number for a read-only MySQL metadata and query server. Each tool earns its place: ping, select, and four metadata operations cover the core needs without bloat or redundancy.
The surface covers the essential read-only operations: connectivity check, arbitrary SELECTs, database/table listing, table structure, DDL definition, and indexes. It lacks advanced metadata (e.g., variables, status, grants) but these are minor gaps for the stated legacy read-only purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- dataOAuthco.thinair
Read-only PostgreSQL, MySQL, SQL Server access via MCP — 24 dialect-aware hosted tools.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Read-only ArcadeOps discovery for developer docs, OAuth, OpenAPI and synthetic sandbox.
Generate, fix, explain and run read-only SQL on PostgreSQL, MySQL and SQL Server
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables read-only access to MySQL databases through natural language queries. Provides automatic table schema discovery and executes SELECT, SHOW, DESCRIBE, and EXPLAIN statements within secure read-only transactions.MIT
- AlicenseNot gradedqualityDmaintenanceProvides read-only access to MySQL databases, enabling schema inspection, table listing, and execution of SELECT queries through the Model Context Protocol.220MIT
- FlicenseNot gradedqualityDmaintenanceEnables safe interaction with MySQL databases through SELECT queries, table structure inspection, and database schema exploration. Provides read-only access to query data and examine database metadata.1-
- AlicenseAqualityDmaintenanceEnables read-only MySQL database access, allowing listing databases, tables, describing schemas, and executing SELECT/SHOW/DESCRIBE/EXPLAIN queries.7454MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Rufflet/mysql-legacy-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server