Skip to main content
Glama

Keyboard Shortcuts MCP Server

by jenova-marie
integration.test.ts7.13 kB
import { describe, it, expect } from 'vitest'; import { loadShortcutData } from './data-loader.js'; import { OpusClient } from './opus-client.js'; import { handleGetShortcuts } from './handlers.js'; import type { GetShortcutsParams } from './types.js'; describe.skipIf(!process.env.ANTHROPIC_API_KEY)('Full Integration Test', () => { it('should handle complete flow: load data → filter → query Opus → return response', async () => { // 1. Load real data const dataStore = loadShortcutData(); expect(dataStore.shortcuts.length).toBeGreaterThan(0); // 2. Create real Opus client const opusClient = new OpusClient(); // 3. Test tmux query (CLI tool) const tmuxParams: GetShortcutsParams = { os: 'ubuntu', application: 'tmux', query: 'how do I split a pane vertically?', }; const tmuxResult = await handleGetShortcuts(tmuxParams, dataStore, opusClient); expect(tmuxResult.content).toHaveLength(1); expect(tmuxResult.content[0].type).toBe('text'); expect(tmuxResult.content[0].text.toLowerCase()).toContain('vertical'); expect(tmuxResult.content[0].text).toContain('Prefix'); console.log('\n✅ Tmux integration test result:'); console.log(tmuxResult.content[0].text); }); it('should handle desktop environment shortcuts', async () => { const dataStore = loadShortcutData(); const opusClient = new OpusClient(); const gnomeParams: GetShortcutsParams = { os: 'ubuntu', desktop: 'gnome', query: 'tile window to the left', }; const gnomeResult = await handleGetShortcuts(gnomeParams, dataStore, opusClient); expect(gnomeResult.content).toHaveLength(1); expect(gnomeResult.content[0].type).toBe('text'); expect(gnomeResult.content[0].text.toLowerCase()).toContain('left'); expect(gnomeResult.content[0].text).toContain('Super'); console.log('\n✅ GNOME integration test result:'); console.log(gnomeResult.content[0].text); }); it('should handle application-specific shortcuts', async () => { const dataStore = loadShortcutData(); const opusClient = new OpusClient(); const firefoxParams: GetShortcutsParams = { os: 'ubuntu', application: 'firefox', query: 'open a new tab', }; const firefoxResult = await handleGetShortcuts(firefoxParams, dataStore, opusClient); expect(firefoxResult.content).toHaveLength(1); expect(firefoxResult.content[0].type).toBe('text'); expect(firefoxResult.content[0].text.toLowerCase()).toMatch(/tab|ctrl/); console.log('\n✅ Firefox integration test result:'); console.log(firefoxResult.content[0].text); }); it('should return error message for unsupported OS', async () => { const dataStore = loadShortcutData(); const opusClient = new OpusClient(); const windowsParams: GetShortcutsParams = { os: 'windows', query: 'test query', }; const windowsResult = await handleGetShortcuts(windowsParams, dataStore, opusClient); expect(windowsResult.content).toHaveLength(1); expect(windowsResult.content[0].type).toBe('text'); expect(windowsResult.content[0].text).toContain('No shortcut data found'); expect(windowsResult.content[0].text).toContain('OS=windows'); console.log('\n✅ Unsupported OS test result:'); console.log(windowsResult.content[0].text); }); it('should return error message for unsupported application', async () => { const dataStore = loadShortcutData(); const opusClient = new OpusClient(); const params: GetShortcutsParams = { os: 'ubuntu', application: 'nonexistent-app', query: 'test query', }; const result = await handleGetShortcuts(params, dataStore, opusClient); expect(result.content).toHaveLength(1); expect(result.content[0].type).toBe('text'); expect(result.content[0].text).toContain('No shortcut data found'); expect(result.content[0].text).toContain('App=nonexistent-app'); }); it('should handle complex multi-parameter queries', async () => { const dataStore = loadShortcutData(); const opusClient = new OpusClient(); const complexParams: GetShortcutsParams = { os: 'ubuntu', desktop: 'gnome', application: 'firefox', query: 'open developer tools', }; const result = await handleGetShortcuts(complexParams, dataStore, opusClient); expect(result.content).toHaveLength(1); expect(result.content[0].type).toBe('text'); expect(result.content[0].text.length).toBeGreaterThan(0); console.log('\n✅ Complex query integration test result:'); console.log(result.content[0].text); }); it('should verify data filtering works correctly', async () => { const dataStore = loadShortcutData(); const opusClient = new OpusClient(); // Get all ubuntu shortcuts const allUbuntu = dataStore.getByFilters({ os: 'ubuntu' }); expect(allUbuntu.length).toBeGreaterThan(20); // Get only tmux shortcuts const onlyTmux = dataStore.getByFilters({ os: 'ubuntu', application: 'tmux' }); expect(onlyTmux.length).toBe(1); expect(onlyTmux[0].application).toBe('tmux'); // Get only GNOME shortcuts const onlyGnome = dataStore.getByFilters({ os: 'ubuntu', desktop: 'gnome' }); expect(onlyGnome.length).toBeGreaterThan(0); onlyGnome.forEach(item => { expect(item.desktop).toBe('gnome'); }); console.log('\n✅ Data filtering verification:'); console.log(` - Total Ubuntu shortcuts: ${allUbuntu.length}`); console.log(` - Tmux shortcuts: ${onlyTmux.length}`); console.log(` - GNOME shortcuts: ${onlyGnome.length}`); }); it('should demonstrate end-to-end workflow with different query types', async () => { const dataStore = loadShortcutData(); const opusClient = new OpusClient(); // Test 1: General query about window management const windowQuery: GetShortcutsParams = { os: 'ubuntu', desktop: 'gnome', query: 'maximize window', }; const windowResult = await handleGetShortcuts(windowQuery, dataStore, opusClient); expect(windowResult.content[0].text).toBeTruthy(); // Test 2: Specific application feature query const vimQuery: GetShortcutsParams = { os: 'ubuntu', application: 'vim', query: 'save and quit', }; const vimResult = await handleGetShortcuts(vimQuery, dataStore, opusClient); expect(vimResult.content[0].text).toBeTruthy(); // Test 3: CLI tool session management const screenQuery: GetShortcutsParams = { os: 'ubuntu', application: 'screen', query: 'detach session', }; const screenResult = await handleGetShortcuts(screenQuery, dataStore, opusClient); expect(screenResult.content[0].text).toBeTruthy(); console.log('\n✅ End-to-end workflow results:'); console.log('1. Window management:', windowResult.content[0].text.substring(0, 100) + '...'); console.log('2. Vim command:', vimResult.content[0].text.substring(0, 100) + '...'); console.log('3. Screen session:', screenResult.content[0].text.substring(0, 100) + '...'); }); });

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/jenova-marie/keyboard-shortcuts-mcp'

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