oracle-sqlplus-mcp
by sagar1012
README.md
# oracle-sqlplus-mcp
An MCP (Model Context Protocol) server for Oracle Database using **sqlplus** as the connection backend. No Oracle Instant Client Node.js bindings required — just a working `sqlplus` binary.
---
## Prerequisites
- **sqlplus** must be installed and available in `PATH` (comes with Oracle Instant Client or full Oracle client)
- Node.js 18+
---
## Installation
```bash
npm install -g oracle-sqlplus-mcp
# or run directly with npx (no install needed):
npx oracle-sqlplus-mcp
```
---
## Connection String Format
```
username/password@host:port/servicename
```
**Examples:**
```
scott/tiger@localhost:1521/ORCL
myuser/mypass@192.168.1.10:1521/XEPDB1
admin/secret@db.example.com:1521/PROD
```
---
## Claude Desktop Configuration
Add to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"oracle": {
"command": "npx",
"args": ["-y", "oracle-sqlplus-mcp"],
"env": {
"ORACLE_CONNECTION": "username/password@host:port/servicename"
}
}
}
}
```
### Optional Environment Variables
| Variable | Default | Description |
|---|---|---|
| `ORACLE_CONNECTION` | *(required)* | Full connection string |
| `SQLPLUS_PATH` | `sqlplus` | Path to sqlplus binary if not in PATH |
| `QUERY_TIMEOUT_MS` | `30000` | Query timeout in milliseconds |
### Custom sqlplus path example
```json
{
"mcpServers": {
"oracle": {
"command": "npx",
"args": ["-y", "oracle-sqlplus-mcp"],
"env": {
"ORACLE_CONNECTION": "scott/tiger@192.168.1.10:1521/ORCL",
"SQLPLUS_PATH": "C:\\oracle\\instantclient_21_9\\sqlplus.exe",
"QUERY_TIMEOUT_MS": "60000"
}
}
}
}
```
---
## Available Tools
| Tool | Description |
|---|---|
| `test_connection` | Test connectivity and return Oracle version |
| `list_schemas` | List all schemas with table counts |
| `list_tables` | List tables, optionally filtered by schema or name pattern |
| `describe_table` | Show columns, data types, nullable, primary keys |
| `get_table_sample` | Fetch sample rows from a table |
| `execute_query` | Run any SELECT query |
| `execute_ddl` | Run DDL/DML (INSERT, UPDATE, DELETE, CREATE, etc.) |
| `list_procedures` | List stored procedures, functions, packages |
---
## Example Prompts
- *"Test the Oracle connection"*
- *"List all schemas in the database"*
- *"Show me tables in the SCOTT schema"*
- *"Describe the EMPLOYEES table"*
- *"Get 5 sample rows from HR.EMPLOYEES"*
- *"Run this query: SELECT * FROM departments WHERE department_id < 50"*
- *"List all stored procedures in the HR schema"*
---
## Troubleshooting
### `sqlplus: command not found`
Set `SQLPLUS_PATH` to the full path of your sqlplus binary.
### `ORA-12541: TNS:no listener`
Check host, port, and that Oracle listener is running.
### `ORA-01017: invalid username/password`
Verify credentials. Connection string format: `user/pass@host:port/service`.
### `SP2-0306: Invalid option`
Ensure sqlplus version supports `-S` silent mode (all modern versions do).
TDQS
A3.9/5.0
Scored across 8 tools
Disambiguation5/5
Every tool has a clearly distinct purpose: describing tables, executing DDL, running queries, sampling rows, listing procedures, schemas, tables, and testing connections. No overlapping functionality.
Naming Consistency5/5
All tool names follow a consistent verb_noun pattern with underscores (e.g., describe_table, list_tables), making them easy to parse and predict.
Tool Count5/5
Eight tools is an appropriate number for a database interaction server, covering essential operations without being overwhelming or too sparse.
Completeness4/5
The toolset covers core database operations (querying, DDL/DML, listing objects, describing, sampling) but lacks capabilities like viewing procedure source code or managing users, which are minor gaps.
Maintenance
ActivityInactive
ResponsivenessNo issues