Actian MCP Server for Ingres¶
Connect the MCP-compatible client to Actian Ingres using the Actian MCP Server. This bridge allows the clients to explore schema metadata and run SQL queries through a standard interface. Queries are read-only unless you enable write mode. The server manages connection pooling, response formatting, and schema discovery automatically, allowing you to focus on data analysis.
Capabilities¶
The Actian MCP Server for Ingres supports the following operations:
| Action | Description |
|---|---|
| Execute SQL queries | Execute read-only SQL against the database |
| List tables and views | Discover available objects in the schema |
| Describe table structure | Retrieve column definitions, types, and comments |
| Read schema metadata | Explore database-level metadata and constraints |
| List functions | View available user-defined functions and procedures |
| Execute write queries | Run INSERT, UPDATE, DELETE, and MERGE statements. Off by default. Requires query_mode set to read-write |
Write support is opt-in
The server permits only read queries unless you set query_mode to read-write. Each write then requires the mcp:write scope and human approval. For more information, see Write support.
Prerequisites¶
Before starting the server, ensure the following requirements are met:
- Container Engine: Docker installed and running on the host machine.
- Database Access: Valid credentials for the Actian Ingres instance
- Security (Optional): TLS certificate and key files for secure deployments
- Authentication (Optional): An OIDC provider, if you require OAuth
Configuration¶
The server runs as a Docker container. To configure the server, mount the (conf.json) file to the container at /app/conf.json.
Create Configuration File¶
Create a file named conf.json in the working directory and define the environment variables:
{
"driver": "{Ingres}",
"server": "@<db-host>,tcp_ip,<installation_id>",
"database": "<database_name>",
"max_connections": 10,
"max_rows": 1000,
"host": "<mcp_server_host>",
"port": 8000,
"query_mode": "read-only",
"write_confirmation": true,
"database_user": "<database_user>",
"database_password": "<database_password>",
"log_level": "INFO",
"ssl_certfile": "/app/server.crt",
"ssl_keyfile": "/app/server.key",
"oauth": {
"FASTMCP_SERVER_AUTH_CONFIG_URL": "<oidc_discovery_url>",
"FASTMCP_SERVER_AUTH_CLIENT_ID": "<client_id>",
"FASTMCP_SERVER_AUTH_CLIENT_SECRET": "<client_secret>",
"FASTMCP_SERVER_AUTH_BASE_URL": "<server_base_url>",
"FASTMCP_SERVER_AUTH_AUDIENCE": "<audience>",
"user_impersonation": true
}
}
Configuration Reference¶
Required Fields
| Field | Type | Description |
|---|---|---|
driver |
string |
The ODBC driver name for the Ingres connection |
server |
string |
The host or connection target for the Ingres database |
database |
string |
The name of the target database |
max_connections |
integer |
Maximum concurrent database connections in the pool |
host |
string |
The host address the server listens to in the container. |
port |
integer |
The port the server listens to in the container (typically 8000) |
database_user |
string |
The username for database authentication |
database_password |
string |
The password for database authentication |
Optional Fields
| Field | Type | Default | Description |
|---|---|---|---|
max_rows |
integer |
1000 |
Maximum number of rows returned in a single query response. A statement that matches more rows is truncated to this limit, and the response includes the truncated and warning fields. Default is 1000. |
log_level |
string |
INFO |
Server log verbosity. Valid values are DEBUG, INFO, WARNING, ERROR, CRITICAL |
ssl_certfile |
string |
— | Path to the TLS certificate file. Set /app/server.crt in the container |
ssl_keyfile |
string |
— | Path to the TLS private key file. Set /app/server.key in the container |
oauth |
object |
— | OAuth configuration block for protected deployments. For more information, see OAuth configuration |
query_mode |
string |
read-only |
Controls whether data-modifying SQL is permitted. Valid values are read-only and read-write. See Write support |
write_confirmation |
boolean |
true |
Whether a write requires human approval before it runs. Set to false only for clients that cannot display the approval prompt. See Write support. Applies only when query_mode is read-write. |
extensions |
array |
— | Extension modules to load, each an object with a required module and an optional config. For more information, see Extensions |
Start the Server¶
With the conf.json file ready, run the following Docker command to start the container. This command mounts the configuration file as a read-only volume.
docker run -d \
-v $(pwd)/conf.json:/app/conf.json:ro \
-p 8000:8000 \
--name=actian-mcp \
actian/ingres-mcp-server:1.1.0
Important
The container reads its configuration from /app/conf.json. Do not change the mount target path.
Once the container is running, you can connect the MCP client to the server using the host and port specified in the configuration.
Usage¶
Once connected, the MCP client automatically discovers the server capabilities. You can perform the following tasks:
- Inspect before querying: List tables and review structure before writing SQL.
- Run a query: Execute a SQL statement and receive formatted results.
- Explore functions: Look up available user-defined functions and stored procedures.
Next Steps¶
-
Write Support
Enable data-modifying SQL, and what gates each write. -
Authentication
Secure the server with OAuth 2.0 and an external identity provider. -
Tools
Explore the available MCP tools for Ingres database operations -
Resources
Learn about schema metadata resources -
Prompts
Access pre-built templates for common database workflows -
Extensions
Add custom tools to the server with a Python extension.