Skip to content

MCP Connection Context Guide

How to pass project-specific database connections to MCP server tools.

The Problem Solved

Before: The MCP server always used connection files from the installation path (~/.hana-cli/default.json).

After: You can pass project-specific context, and the MCP server automatically detects the correct project connection.

Connection Context Parameters

When calling MCP tools, add __projectContext:

json
{
  "schema": "MY_SCHEMA",
  "__projectContext": {
    "projectPath": "/absolute/path/to/my-project",
    "connectionFile": ".env"
  }
}

How It Works

  1. AI Agent passes __projectContext with project path
  2. MCP Server detects the context parameter
  3. Server extracts projectPath and connectionFile
  4. CLI process changes directory to project
  5. CLI loads connection from project's .env or default-env.json
  6. Database connects using project-specific credentials

Connection Resolution Order

After project context is applied:

  1. .cdsrc-private.json (project directory)
  2. default-env.json (project directory) ← Most common
  3. .env (project directory) ← Also common
  4. ~/.hana-cli/default.json (fallback to install path)
  5. VCAP_SERVICES environment variable
  6. Direct connection parameters

Examples

Example 1: Project with default-env.json

javascript
// AI Agent calling MCP
const result = await mcpClient.call('hana_tables', {
  schema: 'MYDB_OBJECTS',
  __projectContext: {
    projectPath: '/home/user/my-sap-project'
    // MCP will look for:
    // /home/user/my-sap-project/default-env.json
  }
})

Example 2: Project with .env file

javascript
const result = await mcpClient.call('hana_export', {
  schema: 'DATA',
  table: 'CUSTOMERS',
  output: 'json',
  __projectContext: {
    projectPath: '/home/user/analytics-app',
    connectionFile: '.env'
    // MCP will look for:
    // /home/user/analytics-app/.env
  }
})

Example 3: Multiple projects

javascript
// Project A
await mcpClient.call('hana_tables', {
  schema: 'PROJECT_A',
  __projectContext: {
    projectPath: '/projects/app-a'
  }
})

// Project B (same MCP server)
await mcpClient.call('hana_tables', {
  schema: 'PROJECT_B',
  __projectContext: {
    projectPath: '/projects/app-b'
  }
})

Benefits

Multi-Project Support
Switch between projects without restarting MCP server

Automatic Connection Discovery
No manual credential passing needed

Local-First
Respects project's own .env or default-env.json files

Backwards Compatible
Works even without __projectContext (falls back to install path)

Secure
Credentials stay in project, not sent in requests

Without Project Context

If __projectContext is not provided:

javascript
// Uses install path connection
await mcpClient.call('hana_tables', {
  schema: 'MYDB'
  // Falls back to ~/.hana-cli/default.json
})

Configuration in Files

For Claude Desktop

Edit claude_desktop_config.json:

json
{
  "mcpServers": {
    "hana-cli": {
      "command": "node",
      "args": ["/path/to/mcp-server/dist/src/index.js"],
      "env": {
        "HANA_CLI_PROJECT_PATH": "/default/project/path"
      }
    }
  }
}

Then Claude can auto-detect the project.

For Custom Integrations

javascript
const context = {
  projectPath: process.cwd(), // Use current working directory
  connectionFile: '.env'
};

await mcpClient.call('hana_tables', {
  schema: 'MYDB',
  __projectContext: context
});

Troubleshooting

Q: MCP can't find my .env file
A: Pass absolute path to projectPath. Check file exists: ls /path/to/project/.env

Q: Still using wrong connection
A: Verify the context is being passed. Enable debug: DEBUG=hana-cli:* node mcp-server/dist/src/index.js

Q: Different project, same schema name
A: Confirm projectPath is correct for each call. MCP uses projectPath to resolve connections.

See Also

Released under the Apache License 2.0