obsidian-mcp-server
Version:
Model Context Protocol (MCP) server designed for LLMs to interact with Obsidian vaults. Provides secure, token-aware tools for seamless knowledge base management through a standardized interface.
75 lines • 3.63 kB
JavaScript
import { ObsidianError, getErrorCodeFromStatus } from '../utils/errors.js';
/**
* Helper function to create a descriptive error message for SSL certificate issues
*/
export function createSSLErrorMessage(error, config) {
return (`SSL certificate verification failed. You have two options:\n\n` +
`Option 1 - Enable HTTP (not recommended for production):\n` +
`1. Go to Obsidian Settings > Local REST API\n` +
`2. Enable "Enable Non-encrypted (HTTP) Server"\n` +
`3. Update your client config to use "http" protocol\n\n` +
`Option 2 - Configure HTTPS (recommended):\n` +
`1. Go to Obsidian Settings > Local REST API\n` +
`2. Under 'How to Access', copy the certificate\n` +
`3. Add the certificate to your system's trusted certificates:\n` +
` - On macOS: Add to Keychain Access\n` +
` - On Windows: Add to Certificate Manager\n` +
` - On Linux: Add to ca-certificates\n` +
` For development only: Set verifySSL: false in client config\n\n` +
`Original error: ${error.message}`);
}
/**
* Helper function to create a descriptive error message for connection refused issues
*/
export function createConnectionRefusedMessage(host, port) {
return (`Connection refused. To fix this:\n` +
`1. Ensure Obsidian is running\n` +
`2. Verify the 'Local REST API' plugin is enabled in Obsidian Settings\n` +
`3. Check that you're using the correct host (${host}) and port (${port})\n` +
`4. Make sure HTTPS is enabled in the plugin settings`);
}
/**
* Helper function to create a descriptive error message for authentication failures
*/
export function createAuthFailedMessage() {
return (`Authentication failed. To fix this:\n` +
`1. Go to Obsidian Settings > Local REST API\n` +
`2. Copy your API key from the settings\n` +
`3. Update your configuration with the new API key\n` +
`Note: The API key changes when you regenerate certificates`);
}
/**
* Helper function to create a descriptive error message for missing API key
*/
export function createMissingAPIKeyMessage() {
return (`Missing API key. To fix this:\n` +
`1. Install the 'Local REST API' plugin in Obsidian\n` +
`2. Enable the plugin in Obsidian Settings\n` +
`3. Copy your API key from Obsidian Settings > Local REST API\n` +
`4. Provide the API key in your configuration`);
}
/**
* Helper function to handle Axios errors consistently
*/
export function handleAxiosError(error, host, port) {
const response = error.response;
const errorData = response?.data;
// Handle common connection errors with helpful messages
if (error.code === 'DEPTH_ZERO_SELF_SIGNED_CERT' || error.code === 'UNABLE_TO_VERIFY_LEAF_SIGNATURE') {
return new ObsidianError(createSSLErrorMessage(error, { verifySSL: true }), 50001, // SSL error code
{ code: error.code });
}
if (error.code === 'ECONNREFUSED') {
return new ObsidianError(createConnectionRefusedMessage(host, port), 50002, // Connection refused
{ code: error.code });
}
if (response?.status === 401) {
return new ObsidianError(createAuthFailedMessage(), 40100, // Unauthorized
{ code: error.code });
}
// For other errors, use API error code if available
const errorCode = errorData?.errorCode ?? getErrorCodeFromStatus(response?.status ?? 500);
const message = errorData?.message ?? error.message ?? "Unknown error";
return new ObsidianError(message, errorCode, errorData);
}
//# sourceMappingURL=errors.js.map