Skip to main content
Glama
config.py4.19 kB
#!/usr/bin/env python # vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai __license__ = 'GPL v3' __copyright__ = '2025, Miguel Iglesias' __docformat__ = 'restructuredtext en' from calibre.utils.config import JSONConfig from calibre.utils.localization import _ from qt.core import ( QWidget, QFileDialog, QFormLayout, QHBoxLayout, QLabel, QLineEdit, QPushButton, ) # Global plugin preferences prefs = JSONConfig('plugins/mcp_server') # Default values prefs.defaults['server_host'] = '127.0.0.1' prefs.defaults['server_port'] = '8765' prefs.defaults['library_path'] = '' prefs.defaults['api_key'] = '' prefs.defaults['command'] = 'python -m calibre_mcp_server.main' prefs.defaults['working_dir'] = '' class MCPServerConfigWidget(QWidget): """Preference widget for MCP Server plugin.""" def __init__(self, prefs_obj, parent=None): super(MCPServerConfigWidget, self).__init__(parent) # Store reference to prefs self.prefs = prefs_obj # Build UI layout layout = QFormLayout(self) # Server host self.host_edit = QLineEdit(self) self.host_edit.setText(self.prefs['server_host']) layout.addRow(_('Server Host:'), self.host_edit) # Server port self.port_edit = QLineEdit(self) self.port_edit.setText(self.prefs['server_port']) layout.addRow(_('Server Port:'), self.port_edit) # Library path + browse library_row = QHBoxLayout() self.library_edit = QLineEdit(self) self.library_edit.setText(self.prefs['library_path']) browse_library_btn = QPushButton(_('Durchsuchen…'), self) browse_library_btn.clicked.connect(self.browse_library) library_row.addWidget(self.library_edit) library_row.addWidget(browse_library_btn) layout.addRow(_('Calibre-Bibliothek:'), library_row) # API key self.api_key_edit = QLineEdit(self) self.api_key_edit.setText(self.prefs['api_key']) layout.addRow(_('API Key (optional):'), self.api_key_edit) # Command self.command_edit = QLineEdit(self) self.command_edit.setText(self.prefs['command']) layout.addRow(_('Server Kommando:'), self.command_edit) # Working directory + browse workdir_row = QHBoxLayout() self.workdir_edit = QLineEdit(self) self.workdir_edit.setText(self.prefs['working_dir']) browse_workdir_btn = QPushButton(_('Durchsuchen…'), self) browse_workdir_btn.clicked.connect(self.browse_workdir) workdir_row.addWidget(self.workdir_edit) workdir_row.addWidget(browse_workdir_btn) layout.addRow(_('Arbeitsverzeichnis:'), workdir_row) # Info label info_label = QLabel( _( 'Das Kommando wird für den MCP WebSocket-Server verwendet.\n' 'CALIBRE_LIBRARY_PATH und API-Key werden als Umgebungsvariablen gesetzt.' ), self, ) layout.addRow(info_label) def browse_library(self): """Select Calibre library root directory.""" path = QFileDialog.getExistingDirectory( self, _('Calibre-Bibliothek auswählen'), self.library_edit.text() or '', ) if path: self.library_edit.setText(path) def browse_workdir(self): """Select working directory for MCP server process.""" path = QFileDialog.getExistingDirectory( self, _('Arbeitsverzeichnis auswählen'), self.workdir_edit.text() or '', ) if path: self.workdir_edit.setText(path) def save_settings(self): """Persist user changes to preferences.""" self.prefs['server_host'] = self.host_edit.text().strip() or '127.0.0.1' self.prefs['server_port'] = self.port_edit.text().strip() or '8765' self.prefs['library_path'] = self.library_edit.text().strip() self.prefs['api_key'] = self.api_key_edit.text().strip() self.prefs['command'] = self.command_edit.text().strip() or '' self.prefs['working_dir'] = self.workdir_edit.text().strip()

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/Miguel0888/mcp-server'

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