@kimsungwhee/apple-docs-mcp
Version:
MCP server for Apple Developer Documentation - Search iOS/macOS/SwiftUI/UIKit docs, WWDC videos, Swift/Objective-C APIs & code examples in Claude, Cursor & AI assistants
174 lines • 7.21 kB
JavaScript
/**
* Configuration constants for Apple Docs MCP
*/
// API Limits
export const API_LIMITS = {
MAX_SEARCH_RESULTS: 50,
MAX_RELATED_APIS: 10,
MAX_REFERENCES: 50,
MAX_SIMILAR_APIS: 15,
MAX_FRAMEWORK_DEPTH: 10,
DEFAULT_FRAMEWORK_DEPTH: 3,
// Default values for various operations
DEFAULT_FRAMEWORK_SYMBOLS_LIMIT: 50,
DEFAULT_DOCUMENTATION_UPDATES_LIMIT: 50,
DEFAULT_TECHNOLOGY_OVERVIEWS_LIMIT: 50,
DEFAULT_SAMPLE_CODE_LIMIT: 50,
DEFAULT_TECHNOLOGIES_LIMIT: 200,
DEFAULT_REFERENCES_LIMIT: 20,
// Maximum values for schema validation
MAX_FRAMEWORK_SYMBOLS_LIMIT: 200,
MAX_DOCUMENTATION_UPDATES_LIMIT: 200,
MAX_TECHNOLOGY_OVERVIEWS_LIMIT: 200,
MAX_SAMPLE_CODE_LIMIT: 200,
MAX_TECHNOLOGIES_LIMIT: 500,
MAX_REFERENCES_LIMIT: 50,
};
// Search Depth Configuration
export const SEARCH_DEPTH_LIMITS = {
shallow: 5,
medium: 10,
deep: 15,
};
// Cache TTL Configuration (in milliseconds)
export const CACHE_TTL = {
API_DOCS: 30 * 60 * 1000, // 30 minutes
SEARCH_RESULTS: 10 * 60 * 1000, // 10 minutes
FRAMEWORK_INDEX: 60 * 60 * 1000, // 1 hour
TECHNOLOGIES: 2 * 60 * 60 * 1000, // 2 hours
UPDATES: 30 * 60 * 1000, // 30 minutes
SAMPLE_CODE: 2 * 60 * 60 * 1000, // 2 hours
TECHNOLOGY_OVERVIEWS: 2 * 60 * 60 * 1000, // 2 hours
};
// Cache Size Configuration
export const CACHE_SIZE = {
API_DOCS: 500,
SEARCH_RESULTS: 200,
FRAMEWORK_INDEX: 100,
TECHNOLOGIES: 50,
UPDATES: 100,
SAMPLE_CODE: 100,
TECHNOLOGY_OVERVIEWS: 100,
// Default cache configuration
DEFAULT_CACHE_SIZE: 1000,
DEFAULT_CACHE_TTL: 30 * 60 * 1000, // 30 minutes
};
// Request Configuration
export const REQUEST_CONFIG = {
TIMEOUT: 30000, // 30 seconds
MAX_RETRIES: 3,
RETRY_DELAY: 1000, // 1 second
MAX_CONCURRENT_REQUESTS: 5,
USER_AGENT: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
};
// Rate Limiting Configuration
export const RATE_LIMIT = {
MAX_REQUESTS_PER_MINUTE: 100,
WINDOW_MS: 60000, // 1 minute
};
// Processing Limits Configuration
export const PROCESSING_LIMITS = {
// Limits for slice operations in various tools
MAX_COLLECTIONS_TO_SHOW: 5,
MAX_RELATED_APIS_PER_SECTION: 3,
MAX_PLATFORM_COMPATIBILITY_ITEMS: 2,
MAX_SIMILAR_APIS_FOR_DEEP_SEARCH: 3,
MAX_TOPIC_IDENTIFIERS: 4,
MAX_DOC_FETCHER_RELATED_APIS: 10,
MAX_DOC_FETCHER_REFERENCES: 15,
MAX_DOC_FETCHER_SIMILAR_APIS: 8,
MAX_DOC_FETCHER_REFS_PER_TYPE: 5,
// Response time thresholds (milliseconds)
RESPONSE_TIME_GOOD_THRESHOLD: 1000,
RESPONSE_TIME_MODERATE_THRESHOLD: 3000,
};
// Apple Developer URLs
export const APPLE_URLS = {
BASE: 'https://developer.apple.com',
SEARCH: 'https://developer.apple.com/search/',
DOCUMENTATION: 'https://developer.apple.com/documentation/',
TUTORIALS_DATA: 'https://developer.apple.com/tutorials/data/',
TECHNOLOGIES_JSON: 'https://developer.apple.com/tutorials/data/documentation/technologies.json',
UPDATES_JSON: 'https://developer.apple.com/tutorials/data/documentation/Updates.json',
UPDATES_INDEX_JSON: 'https://developer.apple.com/tutorials/data/index/updates',
TECHNOLOGY_OVERVIEWS_JSON: 'https://developer.apple.com/tutorials/data/documentation/TechnologyOverviews.json',
TECHNOLOGY_OVERVIEWS_INDEX_JSON: 'https://developer.apple.com/tutorials/data/index/technologyoverviews',
SAMPLE_CODE_JSON: 'https://developer.apple.com/tutorials/data/documentation/SampleCode.json',
SAMPLE_CODE_INDEX_JSON: 'https://developer.apple.com/tutorials/data/index/samplecode',
};
// WWDC URLs
export const WWDC_URLS = {
BASE: 'https://developer.apple.com/videos',
TOPICS: 'https://developer.apple.com/videos/topics/',
YEAR_BASE: 'https://developer.apple.com/videos/wwdc',
PLAY_BASE: 'https://developer.apple.com/videos/play/wwdc',
// URL builders
getYearUrl: (year) => `https://developer.apple.com/videos/wwdc${year}/`,
getVideoUrl: (year, videoId) => `https://developer.apple.com/videos/play/wwdc${year}/${videoId}/`,
getCodeUrl: (year, videoId) => `https://developer.apple.com/videos/play/wwdc${year}/${videoId}/code`,
getTranscriptUrl: (year, videoId) => `https://developer.apple.com/videos/play/wwdc${year}/${videoId}/transcript`,
getResourcesUrl: (year, videoId) => `https://developer.apple.com/videos/play/wwdc${year}/${videoId}/resources`,
getTopicUrl: (topicId) => `https://developer.apple.com/videos/${topicId}/`,
};
// WWDC Configuration
export const WWDC_CONFIG = {
// Year ranges
EARLIEST_YEAR: 2014,
LATEST_YEAR: 2025,
CODE_TAB_INTRODUCED_YEAR: 2022, // WWDC22 introduced separate code tabs
// Available years array
AVAILABLE_YEARS: ['2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025'],
// Default limits
DEFAULT_VIDEO_LIMIT: 50,
DEFAULT_CODE_EXAMPLES_LIMIT: 30,
DEFAULT_SEARCH_LIMIT: 20,
DEFAULT_RELATED_VIDEOS_LIMIT: 15,
DEFAULT_TOPIC_VIDEOS_LIMIT: 20,
// Maximum limits
MAX_VIDEO_LIMIT: 200,
MAX_CODE_EXAMPLES_LIMIT: 100,
MAX_SEARCH_LIMIT: 100,
MAX_RELATED_VIDEOS_LIMIT: 50,
MAX_TOPIC_VIDEOS_LIMIT: 100,
// Processing limits
MIN_CODE_LENGTH: 10, // Minimum code length to consider valid
MAX_CONTEXT_MATCHES: 3, // Maximum matches per video in search results
MAX_TOPIC_VIDEOS_FOR_SCORING: 10, // Maximum videos to load for similarity scoring
// Cache TTL for WWDC data (in milliseconds)
CACHE_TTL: 30 * 60 * 1000, // 30 minutes
};
// WWDC Data Source Configuration
export const WWDC_DATA_SOURCE_CONFIG = {
github: {
owner: 'kimsungwhee',
repo: 'apple-docs-mcp',
branch: 'main',
baseUrl: 'https://cdn.jsdelivr.net/gh/kimsungwhee/apple-docs-mcp@main/data/wwdc',
},
local: {
dataDir: 'data/wwdc', // Relative path from project root
},
// File paths
filePaths: {
globalMetadata: 'index.json',
topicIndex: (topicId) => `by-topic/${topicId}/index.json`,
yearIndex: (year) => `by-year/${year}/index.json`,
videoData: (year, videoId) => `videos/${year}-${videoId}.json`,
allVideos: 'all-videos.json',
},
};
// Error Messages
export const ERROR_MESSAGES = {
INVALID_URL: 'URL must be from developer.apple.com',
FETCH_FAILED: 'Failed to fetch data from Apple Developer Documentation',
PARSE_FAILED: 'Failed to parse response data',
NOT_FOUND: 'Documentation not found (404). This URL may have been moved or removed.',
TIMEOUT: 'Request timed out. Please try again later.',
NETWORK_ERROR: 'Network error occurred. Please check your connection.',
RATE_LIMITED: 'Request rate limit exceeded. Please wait before trying again.',
API_ERROR: 'API error occurred while processing the request.',
CACHE_ERROR: 'Cache operation failed, but the request will continue.',
VALIDATION_ERROR: 'Input validation failed. Please check your parameters.',
SERVICE_UNAVAILABLE: 'Apple Developer Documentation service is temporarily unavailable.',
};
//# sourceMappingURL=constants.js.map