Skip to main content
Glama
delt4d

MCP Sankhya Community Search Server

by delt4d

SankhyaMCP

MCP (Model Context Protocol) server for the Sankhya ERP Oracle database. Exposes safe SQL execution over multiple named Oracle connections to AI agents via the MCP protocol.

Overview

  • Dynamic multi-connection Oracle support — define any number of named connections via environment variables

  • Read-only tool (execute_query) enforces SELECT/WITH/EXPLAIN only

  • Writable tool (execute_unsafe_query) for DML/DDL — blocked on read-only connections

  • CSV output for SELECT queries; success message for DML/DDL

  • Never raises — all errors returned as "Erro[...]: ..." strings

  • Built with FastMCP and managed with uv

Related MCP server: Discourse MCP

Prerequisites

  • Python 3.11+

  • uvinstall guide

  • No Oracle Client required (uses oracledb thin mode)

  • Oracle database accessible from the machine running the server

Setup

  1. Clone the repository and install dependencies:

uv sync
  1. Configure environment variables in .vscode/mcp.json (copy from the template in this repo — the file is git-ignored):

{
  "servers": {
    "sankhya-mcp": {
      "type": "stdio",
      "command": "${workspaceFolder}/.venv/Scripts/python.exe",
      "args": ["${workspaceFolder}/mcp_server.py"],
      "env": {
        "ORACLE_CONNECTIONS": "teste,producao",
        "ORACLE_TESTE_USER": "your_user",
        "ORACLE_TESTE_PASSWORD": "your_password",
        "ORACLE_TESTE_DSN": "host:port/service_name",
        "ORACLE_PRODUCAO_USER": "your_user",
        "ORACLE_PRODUCAO_PASSWORD": "your_password",
        "ORACLE_PRODUCAO_DSN": "host:port/service_name",
        "ORACLE_PRODUCAO_READONLY": "true",
        "ORACLE_DEFAULT_CONNECTION": "teste"
      }
    }
  }
}
  1. Open the project in VS Code — the MCP panel will detect the server automatically.

Configuring Connections

Connections are defined entirely via environment variables — no code changes required.

1. Declare connection names

ORACLE_CONNECTIONS=teste,producao,SUP

Comma-separated list of names. If omitted, the server falls back to the built-in defaults (teste and producao).

2. Define credentials for each connection

For each name {NAME} declared above, set:

Variable

Required

Description

ORACLE_{NAME}_USER

yes

Oracle username

ORACLE_{NAME}_PASSWORD

yes

Oracle password

ORACLE_{NAME}_DSN

yes

host:port/service_name

ORACLE_{NAME}_SCHEMA

no

Schema prefix for ALTER SESSION SET CURRENT_SCHEMA (default: {NAME} uppercased)

ORACLE_{NAME}_DESCRIPTION

no

Human-readable description shown in list_schemas

ORACLE_{NAME}_READONLY

no

Set "true" to block DML/DDL on this connection

3. Set the default connection (optional)

ORACLE_DEFAULT_CONNECTION=SUP

If omitted, the first connection in ORACLE_CONNECTIONS is used.

Full example (mcp.json env block)

"env": {
  "ORACLE_CONNECTIONS": "teste,SUP",
  "ORACLE_TESTE_USER": "user_teste",
  "ORACLE_TESTE_PASSWORD": "pass_teste",
  "ORACLE_TESTE_DSN": "host:1521/ORCL",
  "ORACLE_TESTE_SCHEMA": "TESTE",
  "ORACLE_TESTE_DESCRIPTION": "Base de teste",
  "ORACLE_SUP_USER": "user_sup",
  "ORACLE_SUP_PASSWORD": "pass_sup",
  "ORACLE_SUP_DSN": "host:1521/SUPORTE",
  "ORACLE_SUP_SCHEMA": "SUPORTE",
  "ORACLE_SUP_DESCRIPTION": "Base de suporte",
  "ORACLE_SUP_READONLY": "true",
  "ORACLE_DEFAULT_CONNECTION": "teste"
}

Available MCP Tools

list_schemas

Lists all available Oracle connections. No parameters. Returns CSV.

Columns: name, schema, description, readonly, is_default

Example response:

name,schema,description,readonly,is_default
teste,TESTE,Base de teste,False,True
producao,SANKHYA,Base de produção,True,False

execute_query

Executes a read-only SQL query (SELECT, CTEs, EXPLAIN PLAN). DML/DDL is rejected.

Parameter

Type

Default

Description

query

str

required

SQL statement (SELECT / WITH / EXPLAIN PLAN)

connection

str

null

Connection name from list_schemas, or null for default

params

dict

null

Bind parameters (:name style)

max_rows

int

500

Maximum rows returned

offset

int

0

Rows to skip before returning results

Returns CSV (with header row) for SELECT queries. Returns "Erro[...]: ..." on failure.

execute_unsafe_query

Executes any SQL including INSERT, UPDATE, DELETE, DDL, and PL/SQL blocks. Blocked on connections where readonly=True.

Same parameters as execute_query. Requires explicit user confirmation before use.

Returns "Sucesso: Comando executado (sem retorno)." for DML/DDL with no result set, or CSV if the statement returns rows.

Example Queries

Always prefix table names with the connection's schema (or rely on ALTER SESSION SET CURRENT_SCHEMA):

-- List recent sales orders
SELECT NUNOTA, DTNEG, CODPARC, VLRNOTA
FROM TGFCAB
WHERE DTNEG >= SYSDATE - 30
ORDER BY DTNEG DESC

-- Check a partner with bind param
SELECT CODPARC, NOMEPARC, CGC_CPF
FROM TGFPAR
WHERE CODPARC = :codparc

Using the MCP tools:

list_schemas                                        → discover connections
execute_query("SELECT ...", "teste")                → read from test DB
execute_query("SELECT ...", "teste", offset=500)    → paginate results
execute_unsafe_query("INSERT ...", "teste")         → write to test DB

Project Structure

mcp_server.py       # FastMCP entry point
src/
  oracle/
    config.py       # ConnectionConfig dataclass + env loading
    query.py        # execute_query() + _is_safe_query() guard
    schemas.py      # list_schemas_info() + list_schemas_csv()
    tools.py        # register_tools(mcp) — wires MCP tools
    __init__.py     # re-exports
tests/
  test_oracle.py    # pytest unit tests

Notes

  • Referencias/ contains reference implementations used during development. It is git-ignored and not part of this project.

  • DML/DDL should only target writable connections (readonly=false).

  • For large result sets, use offset + max_rows to paginate.

Available Tools

12 tools
call_procedureA
Destructive

Call a stored procedure or package procedure via anonymous PL/SQL block. Supports IN parameters only; OUT parameters are not supported. Commits automatically. Only available on writable connections.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNoIN parameters as key-value pairs. OUT parameters not supported.
connectionNoConnection name from list_schemas. Must have readonly=false.
procedure_nameYesProcedure or package name, e.g. 'MY_PROC' or 'PKG.PROC'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond the destructiveHint annotation: it explicitly states 'Commits automatically,' which is critical for a procedure that may modify data, and 'Only available on writable connections,' an operational prerequisite. It also clarifies the IN-only parameter limitation. This goes well beyond structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded: the first sentence states the main purpose, followed by three short sentences covering limitations, commit behavior, and connection requirement. Every sentence adds value with no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a procedure-call tool, the description covers all essential aspects: purpose, parameter limitations, commit behavior, and connection prerequisites. An output schema exists, so return-value details are not needed. The description is complete for an agent to correctly select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%—each parameter already has a meaningful description (e.g., params: 'IN parameters as key-value pairs', connection: 'Must have readonly=false'). The tool description adds no new parameter-level information, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Call a stored procedure or package procedure via anonymous PL/SQL block.' It uses a specific verb, names the resource type, and distinguishes it from siblings like create_procedure or execute_query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear usage constraints: 'Supports IN parameters only', 'Commits automatically', and 'Only available on writable connections.' This tells the agent when the tool is appropriate and what conditions must be met, though no explicit alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_procedureA
Destructive

Create or replace a procedure, function, or package using a full DDL statement. The statement must start with CREATE. Commits automatically (DDL). Only available on writable connections.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNoConnection name from list_schemas. Must have readonly=false.
procedure_sqlYesFull CREATE OR REPLACE PROCEDURE/FUNCTION/PACKAGE [BODY] DDL statement.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the destructive/replacing nature is known. The description adds valuable context beyond annotations: 'Commits automatically (DDL)' and 'Only available on writable connections.' These are behavioral constraints not present in the annotations, and they do not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences, front-loaded with the main purpose and immediately followed by essential constraints. There is zero fluff or repetition of schema/annotation details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter tool with an output schema and destructiveHint annotation, the description covers the essential operating context: what it creates/replaces, the required SQL form, auto-commit behavior, and connection restrictions. It doesn't explain return values, but the output schema exists and the tool is straightforward, so this is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema descriptions for both parameters ('Connection name from list_schemas. Must have readonly=false.' and 'Full CREATE OR REPLACE PROCEDURE/FUNCTION/PACKAGE [BODY] DDL statement.') are already detailed. The description adds a general rule ('must start with CREATE') but does not add much beyond the schema, so the baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Create or replace') and resource ('procedure, function, or package') and adds scope via 'full DDL statement'. It distinguishes from siblings like create_trigger and call_procedure by naming the exact object types, so the agent knows exactly what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context: the statement must start with CREATE and only works on writable connections, which implies when it can be used. However, it does not explicitly mention alternatives or when not to use it (e.g., versus execute_unsafe_query for DDL). This is clear context but no explicit exclusions or alternatives, so it earns a 3.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_triggerA
Destructive

Create or replace a trigger using a full DDL statement. The statement must start with CREATE. Commits automatically (DDL). Only available on writable connections.

ParametersJSON Schema
NameRequiredDescriptionDefault
connectionNoConnection name from list_schemas. Must have readonly=false.
trigger_sqlYesFull CREATE OR REPLACE TRIGGER ... DDL statement.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (destructiveHint: true), the description discloses that it commits automatically (DDL) and is only available on writable connections, which are important behavioral traits. It does not contradict 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three short sentences, each providing meaningful information without filler. It is well-structured and front-loaded with the main purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations are present, the description covers the core behavior and constraints (DDL, commit, writable connection) adequately. It does not need to detail return values or every edge case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage for both parameters (connection and trigger_sql), so the description adds little extra meaning. It restates that the statement must start with CREATE, but this is already implied in the trigger_sql schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Create or replace a trigger using a full DDL statement' with a specific verb and resource, clearly distinguishing it from sibling tools like create_procedure and set_trigger_status. It also adds constraints like 'must start with CREATE' and 'Only available on writable connections'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context by stating the tool only works on writable connections, commits automatically, and requires the statement to start with CREATE. However, it does not explicitly mention alternatives or when not to use this tool versus siblings like set_trigger_status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_queryA
Destructive

Execute a DELETE statement. Commits automatically. Only available on writable connections (readonly=false in list_schemas). Returns the number of rows deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesDELETE SQL statement. Must start with DELETE.
paramsNoBind parameters as key-value pairs, e.g. {"id": 1}.
connectionNoConnection name from list_schemas. Must have readonly=false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important behaviors beyond annotations: automatic commit, availability only on writable connections, and return of the deleted row count. Annotations only indicate destructive=true, so the description adds significant context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each carrying distinct information: purpose, commit behavior, availability, and return value. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter destructive operation with full schema coverage and an output schema, the description covers all necessary context: purpose, commit behavior, connection requirements, and return value. It is sufficient for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning all three parameters (query, params, connection) are well-documented in the input schema. The description repeats the connection constraint but adds no new parameter-level meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Execute a DELETE statement,' which is a specific verb and resource. It distinguishes from siblings like insert_query and update_query by specifying DELETE. It also adds commit behavior and return value.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: DELETE statements only, available only on writable connections. It does not explicitly mention alternatives or exclusions, but the constraint on readonly connections is a clear usage guideline. The tool's name and description imply its purpose relative to siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

execute_queryA
Read-only

Execute read-only SQL query (SELECT and EXPLAIN PLAN only). CTEs (WITH ... SELECT) accepted. Use list_schemas to see available connections and their readonly status.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSQL query to execute. SELECT, WITH (CTE), and EXPLAIN PLAN only.
offsetNoRow offset for pagination. Default 0.
paramsNoBind parameters as key-value pairs, e.g. {"id": 1}.
max_rowsNoMaximum rows to return. Default 500.
connectionNoConnection name from list_schemas. Defaults to the default connection.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false. The description adds specific constraints: only SELECT and EXPLAIN PLAN are permitted, and CTEs are accepted. It also notes connections have readonly status via the list_schemas hint. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences, front-loaded with the core purpose, and every sentence adds value. It avoids fluff and is highly scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations cover safety, the description is complete for a query tool. It covers statement types, CTE support, and connection discovery. It does not mention pagination or bind parameters, but those are well-documented in the schema, so the description need not repeat them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds a little context around the query parameter (read-only, CTE acceptance) and connection (readonly status), but largely repeats what the schema already states. It does not meaningfully enhance parameter understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool executes read-only SQL queries (SELECT and EXPLAIN PLAN only), with CTEs accepted. It distinguishes from sibling tools by emphasizing read-only, which contrasts with insert_query, update_query, delete_query, call_procedure, and execute_unsafe_query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it is for read-only SQL queries, and explicitly says to use list_schemas to see available connections and their readonly status. It does not explicitly name write tools as alternatives, but the read-only restriction and sibling names imply 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.

execute_unsafe_queryA
Destructive

Execute any SQL statement without restrictions. SELECT returns CSV; DML returns row count. Set auto_commit=false for a dry-run: changes are rolled back after reporting the affected row count. Only available on writable connections.

ParametersJSON Schema
NameRequiredDescriptionDefault
sqlYesAny SQL statement: SELECT, DML, DDL, PL/SQL block, etc.
paramsNoBind parameters as key-value pairs.
connectionNoConnection name from list_schemas. Must have readonly=false.
auto_commitNoIf true (default), commits after DML. If false, rolls back — useful for dry-run testing.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description adds crucial behavior: unrestricted SQL, CSV output for SELECT, row count for DML, and the auto_commit=false dry-run rollback mechanism. It also notes the writable connection requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the purpose, then output behavior, then dry-run and connection constraint. Every sentence adds value; no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the potentially destructive nature, the description covers execution scope, return types, dry-run safety mechanism, and a constraint. With a rich schema and output schema, this is fully adequate for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description enriches meaning by explaining that auto_commit=false rolls back after reporting affected row count and clarifies SQL result types, adding value beyond schema parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Execute any SQL statement without restrictions' with specific output behavior (SELECT returns CSV; DML returns row count). This distinguishes it from sibling tools like execute_query and the dedicated insert/update/delete tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied through 'without restrictions' and 'Only available on writable connections,' but no explicit when/when-not guidance or named alternatives is provided. The dry-run hint gives parameter usage guidance but not tool selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

insert_queryA
Destructive

Insert a single row into a table. Commits automatically. Only available on writable connections (readonly=false in list_schemas). Returns the number of rows inserted.

ParametersJSON Schema
NameRequiredDescriptionDefault
tableYesTable name, e.g. 'AD_TABELA' or 'SCHEMA.TABELA'.
valuesYesColumn-value pairs, e.g. {"NOME": "João", "CODIGO": 10}.
connectionNoConnection name from list_schemas. Must have readonly=false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark the tool as destructive, and the description adds valuable context: 'Commits automatically' and 'Returns the number of rows inserted.' This goes beyond the annotation and clarifies transaction behavior and return value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four short, purposeful sentences with no fluff. It front-loads the core purpose and keeps supplementary details compact.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple insert tool, the description covers purpose, connection requirements, transaction behavior, and return value. An output schema exists, so further return details are unnecessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with all three parameters described in the input schema. The description reinforces the connection constraint but doesn't add new parameter meaning beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Insert a single row into a table,' using a specific verb and resource. It distinguishes itself from sibling tools like update_query and delete_query by focusing on insert-only behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Only available on writable connections (readonly=false in list_schemas),' which is a key usage constraint. It doesn't explicitly name alternatives for multi-row inserts, but the sibling tool names imply context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_schemasA
Read-only

List available Oracle connections/schemas with descriptions and readonly status. Use readonly field to determine which tools are available:

  • execute_query: any connection

  • insert_query / update_query / delete_query / call_procedure / create_trigger / set_trigger_status / create_procedure / execute_unsafe_query: readonly=false only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, but the description adds useful context by explaining the output includes readonly status and how that determines tool availability. It does not contradict annotations. No mention of pagination or limits, but the tool is a simple listing operation with no side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose, and uses a clear bullet-like list for tool availability. Every sentence adds value with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, an output schema exists (as per context), and sibling tools are numerous, the description sufficiently covers what the tool does and how to use its output for selecting subsequent tools. It is complete 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the baseline is 4. The description does not need to explain parameters, but it adds value by describing the output fields (descriptions and readonly status) which aids the agent in interpreting the return value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'List available Oracle connections/schemas with descriptions and readonly status.' It uses a specific verb ('List') and identifies the resource (Oracle connections/schemas) and the output attributes (descriptions, readonly status). This differentiates it from sibling tools like sankhya_list_connections by specifying Oracle and readonly status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: 'Use readonly field to determine which tools are available' and then enumerates which tools require readonly=false. This tells the agent when to use this tool (i.e., to discover available connections and subsequently choose an appropriate query/update tool) and how to interpret the output for decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sankhya_call_serviceA

Chama um serviço Sankhya via API REST.

Retorna JSON da resposta incluindo status ('1'=ok, '0'=erro) e responseBody. Use sankhya_list_connections para ver as conexões disponíveis.

ParametersJSON Schema
NameRequiredDescriptionDefault
moduleNoMódulo Sankhya: 'mge' (padrão), 'mgecom', 'mgeloc', 'mgefin', etc.mge
connectionNoNome da conexão (ver sankhya_list_connections). Default: conexão padrão.
request_bodyNorequestBody da chamada. Campos usam wrapper {"CAMPO": {"$": valor}}
service_nameYesNome do serviço Sankhya, ex: 'CACSP.confirmarNota', 'CRUDServiceProvider.loadRecords'

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond the annotations by explaining the response structure (status with '1'=ok/'0'=erro and responseBody). It does not contradict the readOnlyHint=false annotation. It could include more side-effect warnings, but the annotation already signals possible writes and the openWorldHint gives additional context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short, front-loaded sentences with no filler. Each sentence provides distinct value: what the tool does, what the response looks like, and where to find connection details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has a rich input schema, an output schema, and annotations, the description covers the essential behavioral aspects (invocation, response status, connection discovery). It is sufficiently complete for a generic REST service caller, though it could mention error handling or side-effect variability explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage of parameter descriptions, including examples for service_name and the request_body wrapper format. The tool description does not add further parameter semantics; it mainly reiterates the connection lookup already mentioned in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool calls a Sankhya service via REST API, using a specific verb ('Chama') and resource ('serviço Sankhya via API REST'). It also specifies the response format, which distinguishes it from sibling tools like execute_query or call_procedure.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a useful pointer to sankhya_list_connections for discovering connections, which helps with a prerequisite. However, it does not explicitly state when to prefer this tool over alternatives like execute_query or call_procedure, nor does it provide exclusions or alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sankhya_list_connectionsA
Read-only

Lista conexões Sankhya disponíveis com auth_url, base_url e status padrão.

Retorna CSV com colunas: name, description, auth_url, base_url, is_default.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, and the description adds that the output is CSV with specific columns, providing useful behavioral context beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the main action and includes output format and columns without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, with no parameters, read-only annotation, and an output schema. The description fully covers the output format and columns, making it complete for this context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so the description does not need to explain parameter semantics. The baseline for zero-parameter tools is 4, which applies here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it lists available Sankhya connections with auth_url, base_url, and default status. It clearly distinguishes from sibling tools that handle schemas, queries, and procedures.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates its purpose as listing connections, which is distinct from query/procedure tools. It does not explicitly mention alternatives but the context is clear enough for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_trigger_statusA
Destructive

Enable or disable a trigger via ALTER TRIGGER name ENABLE/DISABLE. Only available on writable connections.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesENABLE or DISABLE.
connectionNoConnection name from list_schemas. Must have readonly=false.
trigger_nameYesTrigger name, e.g. 'TRG_MINHA_TABELA'.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the SQL mechanism (ALTER TRIGGER) and the writable connection requirement, adding behavioral context beyond the annotations. Since destructiveHint is already true, the description does not need to restate that, but it does clarify the exact operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action, and contains no redundant information. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity, the presence of an output schema, and annotations, this description is complete. It covers the core action and the key constraint (writable connections) without needing to explain return values or error handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions for all parameters are present and comprehensive (trigger_name example, action values, connection requirements). The description adds no additional parameter-level detail beyond referencing ENABLE/DISABLE, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Enable or disable a trigger via ALTER TRIGGER name ENABLE/DISABLE.' It uses specific verb+resource and distinguishes itself from sibling tools like create_trigger, which creates triggers rather than changing their status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear prerequisite: 'Only available on writable connections.' This gives important context for when the tool can be used. It does not explicitly name alternatives or when-not conditions, but the purpose is self-evident given the sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_queryA
Destructive

Execute an UPDATE statement. Commits automatically. Only available on writable connections (readonly=false in list_schemas). Returns the number of rows updated.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesUPDATE SQL statement. Must start with UPDATE.
paramsNoBind parameters as key-value pairs, e.g. {"id": 1}.
connectionNoConnection name from list_schemas. Must have readonly=false.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that the tool commits automatically and returns the number of rows updated, adding context beyond the annotations. The destructiveHint annotation already signals destructive behavior, and the description reinforces this while providing useful operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no wasted words. The first sentence states the primary purpose, the second gives a key constraint, and the third explains the return value. Well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has a simple scope, full schema coverage, an output schema, and annotations, the description covers the essential behavioral aspects. It mentions return value, auto-commit, and connection prerequisite, making it sufficiently complete for an agent to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema descriptions already cover all three parameters (query, params, connection) at 100% coverage. The description does not add significant new meaning beyond the schema, only repeating the requirement for a writable connection already present in the connection parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Execute an UPDATE statement,' which clearly specifies the verb and resource. It is distinct from sibling tools like insert_query and delete_query by explicitly focusing on UPDATE operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context by stating 'Only available on writable connections (readonly=false in list_schemas),' guiding when the tool can be used. It does not explicitly name alternatives, but the constraint plus the tool name makes the usage situation clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.9/5.0
Disambiguation4/5

Most tools have clearly distinct purposes: read-only query, insert/update/delete, procedure call, DDL operations, and Sankhya service calls. The catch-all execute_unsafe_query overlaps by design but is explicitly labeled as the unrestricted fallback, so the boundaries are mostly clear.

Naming Consistency2/5

SQL tools consistently follow a verb_noun pattern (execute_query, insert_query, create_trigger), but the Sankhya tools reverse the order with a domain prefix (sankhya_call_service, sankhya_list_connections). This mixed convention creates confusion about whether the tool name starts with the action or the domain.

Tool Count4/5

12 tools is within the typical well-scoped range. The set covers both Oracle SQL operations and Sankhya service integration, though the presence of both specialized DDL tools and execute_unsafe_query introduces some redundancy.

Completeness3/5

The SQL tools cover insert, update, delete, query, procedure/trigger management, and unsafe fallback, but there is no schema discovery tool like list_tables or describe_table. The Sankhya integration is minimal (call service, list connections) and may not cover all necessary service operations.

Maintenance

ActivityStale
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables interaction with USCardForum, a Discourse-based community focused on US credit cards and points. Provides 22 tools for discovering topics, reading content, researching user profiles, and managing authenticated actions like notifications and bookmarks.
    22
    MIT

Latest Blog Posts

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/delt4d/SankhyaMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server