Skip to content

✅ Context-Aware MCP Implementation - COMPLETE ​

Note: This is a historical reference document capturing the implementation status as of February 16, 2026. For current implementation details, see:

Date: February 16, 2026
Status: ✅ IMPLEMENTED AND COMPILED (Historical Snapshot)
Branch: Feb2026


What Was Implemented ​

The MCP server now supports project-specific connection context. Instead of always using the install path's default connection files, you can now pass the path to any project's directory, and the CLI will use that project's connection configuration.


Files Created ​

1. mcp-server/src/connection-context.ts ✅ ​

Purpose: Interface definition for connection context

Contents:

typescript
export interface ConnectionContext {
  projectPath?: string;       // Absolute path to project
  connectionFile?: string;    // Connection file name (e.g., ".env")
  host?: string;              // Direct connection - host
  port?: number;              // Direct connection - port
  user?: string;              // Direct connection - user
  password?: string;          // Direct connection - password
  database?: string;          // Direct connection - database
}

Files Modified ​

1. mcp-server/src/executor.ts ✅ ​

Changes Made:

  1. Added Import:

    typescript
    import { ConnectionContext } from './connection-context.js';
  2. Updated Function Signature:

    typescript
    // BEFORE:
    export async function executeCommand(
      commandName: string,
      args: Record<string, any> = {}
    )
    
    // AFTER:
    export async function executeCommand(
      commandName: string,
      args: Record<string, any> = {},
      context?: ConnectionContext
    )
  3. Added Environment Setup:

    • Builds environment object from context
    • Sets HANA_CLI_PROJECT_PATH if context provided
    • Sets HANA_CLI_CONN_FILE if context provided
    • Sets HANA_CLI_HOST, HANA_CLI_PORT, HANA_CLI_USER, HANA_CLI_PASSWORD, HANA_CLI_DATABASE for direct connections
  4. Updated spawn() Call:

    • Changed cwd from hardcoded install path to context.projectPath if provided
    • Passes environment with context variables

2. mcp-server/src/index.ts ✅ ​

Changes Made:

  1. Added Import:

    typescript
    import { ConnectionContext } from './connection-context.js';
  2. Extended Tool Schemas (Lines ~120):

    • Added __projectContext property to ALL command tool schemas
    • Properties include: projectPath, connectionFile, host, port, user, password, database
    • All are optional, backward compatible
  3. Updated Tool Handler (Lines ~1375):

    typescript
    // Extract context if provided
    const context = (args as any)?.__projectContext as ConnectionContext | undefined;
    
    // Remove context from args before passing to CLI
    const cleanArgs = { ...args };
    delete cleanArgs.__projectContext;
    
    // Pass context to executor
    const result = await executeCommand(actualCommandName, cleanArgs, context);

3. utils/connections.js ✅ ​

Changes Made (Lines ~112+):

  1. Added Project Context Detection:

    javascript
    // Check for project-specific context from MCP server
    const projectPath = process.env.HANA_CLI_PROJECT_PATH;
    const connFile = process.env.HANA_CLI_CONN_FILE;
    
    // If project path provided, change to that directory
    if (projectPath && fs.existsSync(projectPath)) {
        process.chdir(projectPath);
        base.debug(`Using project directory for connection resolution: ${projectPath}`);
    }
  2. Added Direct Connection Support:

    javascript
    // Check for direct database credentials from MCP
    if (process.env.HANA_CLI_HOST) {
        const directConnection = {
            hana: {
                host: process.env.HANA_CLI_HOST,
                port: parseInt(process.env.HANA_CLI_PORT || '30013'),
                user: process.env.HANA_CLI_USER,
                password: process.env.HANA_CLI_PASSWORD,
                database: process.env.HANA_CLI_DATABASE || 'SYSTEMDB',
            }
        };
        return directConnection;
    }

Build Status ​

✅ TypeScript Compilation: SUCCESSFUL

All files compiled without errors:

  • mcp-server/src/connection-context.ts → mcp-server/build/connection-context.js
  • mcp-server/src/executor.ts → mcp-server/build/executor.ts (updated)
  • mcp-server/src/index.ts → mcp-server/build/index.js (updated)

Command used:

bash
cd mcp-server && npm run build

How It Works Now ​

Before Implementation ​

bash
AI Agent: "List tables"
    ↓
MCP Server: { schema: 'MY_SCHEMA' }
    ↓
CLI spawned with cwd=/install/path
    ↓
Connection via ~/.hana-cli/default.json (INSTALL PATH DATABASE!)

After Implementation ​

bash
AI Agent: "List tables"
    ↓
MCP Server: { 
  schema: 'MY_SCHEMA',
  __projectContext: {
    projectPath: '/home/user/projects/my-app',
    connectionFile: '.env'
  }
}
    ↓
CLI spawned with cwd=/home/user/projects/my-app
    ↓
Connection via /home/user/projects/my-app/.env (PROJECT DATABASE!)

Usage Examples ​

Example 1: Using Project's .env File ​

javascript
// Agent knows the project and its connection file
const result = await mcp.callTool('hana_tables', {
  schema: 'MY_SCHEMA',
  __projectContext: {
    projectPath: '/home/user/projects/my-cap-app',
    connectionFile: '.env'
  }
});

// Result: Uses /home/user/projects/my-cap-app/.env for database connection

Example 2: Direct Connection with Credentials ​

javascript
// Agent has explicit database credentials
const result = await mcp.callTool('hana_status', {
  __projectContext: {
    host: 'database.example.com',
    port: 30013,
    user: 'DBADMIN',
    password: 'MyPassword123',
    database: 'SYSTEMDB'
  }
});

// Result: Connects directly with provided credentials

Example 3: Backward Compatible (No Context) ​

javascript
// If no __projectContext provided, works exactly as before
const result = await mcp.callTool('hana_tables', {
  schema: 'MY_SCHEMA'
});

// Result: Uses install path default connection (same as old behavior)

Example 4: Multiple Projects in One Conversation ​

javascript
// First command - Project A's database
const tablesA = await mcp.callTool('hana_tables', {
  schema: 'SCHEMA_A',
  __projectContext: {
    projectPath: '/projects/project-a'
  }
});

// Second command - Project B's database (different database!)
const tablesB = await mcp.callTool('hana_tables', {
  schema: 'SCHEMA_B',
  __projectContext: {
    projectPath: '/projects/project-b'
  }
});

// Each uses its own project's database - NO CONNECTION CONFLICTS!

Data Flow Diagram ​


Key Features ​

✅ Project-Specific Connections

  • Each project uses its own database
  • AI Agent controls which project context

✅ Multiple Connection Methods

  • File-based: .env, default-env.json
  • Direct: host/port/user/password
  • Support for both approaches

✅ Backward Compatible

  • No breaking changes
  • Existing code works unchanged
  • __projectContext is optional

✅ Multi-Project Conversations

  • Switch between projects mid-conversation
  • Each command uses its own database
  • No connection conflicts

✅ Secure by Default

  • Passwords optional (prefer files)
  • Environment variables isolated per process
  • No global state pollution

Environment Variables Reference ​

The following environment variables control context behavior:

VariablePurposeExample
HANA_CLI_PROJECT_PATHProject directory for connection search/home/user/projects/my-app
HANA_CLI_CONN_FILEConnection file name.env or default-env.json
HANA_CLI_HOSTDirect connection - hostdatabase.example.com
HANA_CLI_PORTDirect connection - port30013
HANA_CLI_USERDirect connection - userDBADMIN
HANA_CLI_PASSWORDDirect connection - passwordMyPassword123
HANA_CLI_DATABASEDirect connection - databaseSYSTEMDB

Testing Checklist ​

  • ✅ Code compiles without errors
  • ✅ Interface properly defined
  • ✅ Executor updated with context parameter
  • ✅ Tool schemas extended with __projectContext
  • ✅ Tool handler extracts and passes context
  • ✅ CLI checks for context environment variables
  • ✅ Build outputs all compiled files
  • ⏳ Runtime testing (in progress)

Breaking Changes ​

NONE! ✅

This implementation is 100% backward compatible:

  • Existing tools work unchanged
  • __projectContext is optional
  • Default behavior preserved when no context provided
  • No modifications to CLI command structure

What Changed at a Glance ​

bash
Before: MCP Shell → CLI (install path) → ~/.hana-cli/default.json
After:  MCP Shell → CLI (project path) → /project/path/.env (via context)

That's it! Simple but powerful.


Next Steps ​

  1. Local Testing: Test with actual projects
  2. Integration Testing: Test with MCP clients
  3. Documentation: Update README with examples
  4. Release: Deploy to production

Summary ​

✅ IMPLEMENTATION COMPLETE

The MCP server is now context-aware and can work with project-specific databases. AI Agents can specify which project context to use, ensuring they connect to the correct database for their work.

All code is compiled and ready for use!


Questions? ​

See the documentation files:

  • implementation-guide.md - How to use it
  • visual-summary.md - Diagrams and flows
  • connection-context-analysis.md - Deep dive
  • connection-context-solution.md - Detailed walkthrough

See Also ​

For Current Implementation:

MCP Server Core: