Skip to main content
Glama
no-technology.ts3.31 kB
import type {ServerContext, ToolResponse} from '../context.js'; import type {Technology} from '../../apple-client/types/index.js'; import {header, bold} from '../markdown.js'; export const buildNoTechnologyMessage = ({client, state}: ServerContext) => async (): Promise<ToolResponse> => { const lastDiscovery = state.getLastDiscovery(); // Get available technologies for better guidance let availableTechnologies: string[] = []; try { const technologies = await client.getTechnologies(); // Filter out invalid entries and get only proper technologies availableTechnologies = Object.values(technologies) .filter(tech => tech.title && tech.kind === 'symbol' && tech.role === 'collection') .slice(0, 8) .map(t => t.title); } catch (error) { console.warn('Failed to get technologies for error message:', error); } const lines = [ header(1, '🚫 Search Cannot Proceed - No Technology Selected'), '', bold('❌ IMPORTANT:', 'Symbol searches and documentation lookups CANNOT work without first selecting a technology.'), '', 'This is a required step because Apple documentation is organized by technology/framework.', '', header(2, '🔧 Required Steps'), '', bold('Step 1:', 'Discover available technologies'), '• `discover_technologies` — see all available Apple technologies', '• `discover_technologies { "query": "swift" }` — filter by keyword', '• `discover_technologies { "query": "ui" }` — find UI frameworks', '', bold('Step 2:', 'Choose a technology'), '• `choose_technology { "name": "SwiftUI" }` — select SwiftUI', '• `choose_technology { "name": "UIKit" }` — select UIKit', '• `choose_technology { "name": "AppKit" }` — select AppKit', '', bold('Step 3:', 'Now you can search'), '• `search_symbols { "query": "Button" }` — search for symbols', '• `search_symbols { "query": "Grid*" }` — use wildcards', '• `get_documentation { "path": "View" }` — get detailed docs', '', header(2, '📚 Available Technologies'), ]; if (availableTechnologies.length > 0) { lines.push('', 'Popular technologies you can choose from:'); for (const tech of availableTechnologies) { lines.push(`• **${tech}** — \`choose_technology { "name": "${tech}" }\``); } if (availableTechnologies.length === 8) { lines.push('• **...and many more** — use `discover_technologies` to see all options'); } } else { lines.push('', 'Use `discover_technologies` to see all available Apple technologies.'); } lines.push( '', header(2, '💡 Quick Start Examples'), '', '**For SwiftUI development:**', '1. `discover_technologies { "query": "swiftui" }`', '2. `choose_technology { "name": "SwiftUI" }`', '3. `search_symbols { "query": "Button" }`', '', '**For UIKit development:**', '1. `discover_technologies { "query": "uikit" }`', '2. `choose_technology { "name": "UIKit" }`', '3. `search_symbols { "query": "UIButton" }`', ); if (lastDiscovery?.results?.length) { lines.push( '', header(2, '🔄 Recently Discovered'), ); for (const result of lastDiscovery.results.slice(0, 3)) { lines.push(`• **${result.title}** — \`choose_technology { "name": "${result.title}" }\``); } } return { content: [{text: lines.join('\n'), type: 'text'}], }; };

Latest Blog Posts

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/MightyDillah/apple-doc-mcp'

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