Skip to main content
Glama

Magic-API MCP Server

by Dwsy
kb_plugins.py17.9 kB
"""Magic-API 插件系统知识库。""" from __future__ import annotations import textwrap from typing import Any, Dict, List # 插件系统知识文档 PLUGINS_KNOWLEDGE: Dict[str, Dict[str, Any]] = { "cluster": { "name": "集群插件", "title": "magic-api-plugin-cluster", "description": "支持多实例集群部署,实现接口自动同步", "features": [ "接口变更自动同步到集群所有实例", "基于Redis的发布订阅机制", "支持实例状态监控", "防止接口信息不一致问题" ], "dependencies": textwrap.dedent(''' <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-plugin-cluster</artifactId> <version>magic-api-lastest-version</version> </dependency> ''').strip(), "configuration": { "instance_id": { "key": "magic-api.instance-id", "description": "实例唯一标识", "example": "instance-01" }, "channel": { "key": "magic-api.cluster.channel", "description": "Redis频道名称", "example": "magic-api:notify:channel" } }, "redis_config": textwrap.dedent(''' spring: redis: host: 192.168.1.100 port: 6379 database: 1 password: your_password ''').strip(), "doc": "https://www.ssssssss.org/magic-api/pages/plugin/cluster/" }, "task": { "name": "定时任务插件", "title": "magic-api-plugin-task", "description": "支持在Magic-API中编写定时任务脚本", "features": [ "支持cron表达式配置", "可视化任务管理界面", "任务执行日志记录", "支持动态启停任务", "集群环境任务防重复执行" ], "dependencies": textwrap.dedent(''' <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-plugin-task</artifactId> <version>magic-api-lastest-version</version> </dependency> ''').strip(), "configuration": { "thread_pool": { "key": "magic-api.task.pool.size", "description": "线程池大小", "default": "CPU核心数", "example": "8" }, "thread_name": { "key": "magic-api.task.thread-name-prefix", "description": "线程名称前缀", "example": "magic-task-" } }, "usage": textwrap.dedent(''' // 定时任务脚本示例 import db; import log; // 查询需要处理的订单 var orders = db.select("SELECT * FROM orders WHERE status = 'pending'"); log.info("处理 {} 个待处理订单", orders.size()); // 处理订单逻辑 orders.each(order => { try { // 处理单个订单 db.update("UPDATE orders SET status = 'processed' WHERE id = ?", order.id); log.info("订单 {} 处理完成", order.id); } catch(e) { log.error("订单 {} 处理失败: {}", order.id, e.message); } }); ''').strip(), "doc": "https://www.ssssssss.org/magic-api/pages/plugin/task/" }, "redis": { "name": "Redis插件", "title": "magic-api-plugin-redis", "description": "集成Redis缓存和数据存储功能", "features": [ "将接口信息存储在Redis中", "支持Redis作为缓存后端", "提供redis模块用于脚本操作", "支持Redis集群和哨兵模式" ], "dependencies": textwrap.dedent(''' <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-plugin-redis</artifactId> <version>magic-api-lastest-version</version> </dependency> ''').strip(), "configuration": { "storage": { "description": "使用Redis存储接口信息", "example": textwrap.dedent(''' magic-api: resource: type: redis prefix: magic-api readonly: false ''').strip() } }, "usage": textwrap.dedent(''' import redis; // 基本的key-value操作 redis.set('user:123', '{"name":"张三","age":20}'); var user = redis.get('user:123'); // Hash操作 redis.hset('user:123', 'email', 'zhangsan@example.com'); var email = redis.hget('user:123', 'email'); // List操作 redis.lpush('queue', 'task1', 'task2'); var task = redis.rpop('queue'); // Set操作 redis.sadd('tags', 'java', 'python', 'javascript'); var tags = redis.smembers('tags'); // 有序集合 redis.zadd('scores', 95, 'user:123'); var rank = redis.zrevrank('scores', 'user:123'); ''').strip(), "doc": "https://www.ssssssss.org/magic-api/pages/plugin/redis/" }, "mongodb": { "name": "MongoDB插件", "title": "magic-api-plugin-mongo", "description": "集成MongoDB数据库操作功能", "features": [ "提供mongo模块进行数据库操作", "支持文档的增删改查", "支持聚合管道操作", "支持索引管理", "支持GridFS文件存储" ], "dependencies": textwrap.dedent(''' <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-plugin-mongo</artifactId> <version>magic-api-lastest-version</version> </dependency> ''').strip(), "configuration": textwrap.dedent(''' spring: data: mongodb: host: localhost port: 27017 database: magicapi username: magicapi password: 123456 ''').strip(), "usage": textwrap.dedent(''' import mongo; // 插入文档 mongo.database('mydb').collection('users').insert({ name: '张三', age: 20, email: 'zhangsan@example.com' }); // 查询文档 var users = mongo.database('mydb').collection('users') .find({age: {$gte: 18}}) .sort({age: -1}) .limit(10) .list(); // 更新文档 mongo.database('mydb').collection('users') .update( {name: '张三'}, {$set: {age: 21}} ); // 删除文档 mongo.database('mydb').collection('users') .remove({age: {$lt: 18}}); // 聚合查询 var result = mongo.database('mydb').collection('orders') .aggregate([ {$match: {status: 'completed'}}, {$group: {_id: '$userId', total: {$sum: '$amount'}}}, {$sort: {total: -1}}, {$limit: 10} ]); ''').strip(), "doc": "https://www.ssssssss.org/magic-api/pages/plugin/mongo/" }, "elasticsearch": { "name": "ElasticSearch插件", "title": "magic-api-plugin-elasticsearch", "description": "集成ElasticSearch搜索引擎功能", "features": [ "提供elasticsearch模块进行搜索操作", "支持索引的创建、删除和管理", "支持文档的增删改查", "支持复杂查询DSL", "支持聚合分析" ], "dependencies": textwrap.dedent(''' <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-plugin-elasticsearch</artifactId> <version>magic-api-lastest-version</version> </dependency> ''').strip(), "configuration": textwrap.dedent(''' spring: elasticsearch: rest: uris: http://127.0.0.1:9200 username: elastic password: 123456789 ''').strip(), "usage": textwrap.dedent(''' import elasticsearch; // 创建索引 elasticsearch.index('users').create({ mappings: { properties: { name: {type: 'text'}, age: {type: 'integer'}, email: {type: 'keyword'} } } }); // 索引文档 elasticsearch.index('users').index('user-1', { name: '张三', age: 20, email: 'zhangsan@example.com' }); // 搜索文档 var result = elasticsearch.index('users').search({ query: { bool: { must: [ {match: {name: '张三'}} ], filter: [ {range: {age: {gte: 18}}} ] } }, sort: [{age: {order: 'desc'}}], from: 0, size: 10 }); // 更新文档 elasticsearch.index('users').update('user-1', { doc: {age: 21} }); // 删除文档 elasticsearch.index('users').delete('user-1'); ''').strip(), "doc": "https://www.ssssssss.org/magic-api/pages/plugin/elasticsearch/" }, "swagger": { "name": "Swagger插件", "title": "magic-api-plugin-swagger", "description": "生成Swagger API文档", "features": [ "自动生成API文档", "支持在线测试接口", "集成Swagger UI界面", "支持API分组管理" ], "dependencies": textwrap.dedent(''' <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-plugin-swagger</artifactId> <version>magic-api-lastest-version</version> </dependency> ''').strip(), "configuration": { "version": { "key": "magic-api.swagger.version", "description": "API版本", "default": "1.0" }, "title": { "key": "magic-api.swagger.title", "description": "API文档标题", "default": "MagicAPI Swagger Docs" } }, "note": "Spring Boot 3.x 请使用 springdoc 插件替代", "doc": "https://www.ssssssss.org/magic-api/pages/plugin/swagger/" }, "springdoc": { "name": "SpringDoc插件", "title": "magic-api-plugin-springdoc", "description": "生成OpenAPI 3.0文档(Spring Boot 3.x)", "features": [ "兼容Spring Boot 3.x", "生成OpenAPI 3.0规范文档", "集成Swagger UI", "支持API分组和标签" ], "dependencies": textwrap.dedent(''' <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-plugin-springdoc</artifactId> <version>magic-api-lastest-version</version> </dependency> ''').strip(), "note": "专为Spring Boot 3.x设计,不兼容2.x版本", "doc": "https://www.ssssssss.org/magic-api/pages/plugin/springdoc/" }, "git": { "name": "Git插件", "title": "magic-api-plugin-git", "description": "使用Git作为接口版本控制和存储", "features": [ "接口版本控制", "多人协作开发", "变更历史追踪", "分支管理支持" ], "dependencies": textwrap.dedent(''' <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-plugin-git</artifactId> <version>magic-api-lastest-version</version> </dependency> ''').strip(), "configuration": { "repository": { "key": "magic-api.resource.git.url", "description": "Git仓库地址", "example": "git@github.com:user/repo.git" }, "branch": { "key": "magic-api.resource.git.branch", "description": "分支名称", "default": "master" }, "auth": { "description": "认证配置", "ssh_key": "magic-api.resource.git.privateKey", "username": "magic-api.resource.git.username", "password": "magic-api.resource.git.password" } }, "note": "目前处于预览阶段,SSH密钥需要使用PEM格式", "doc": "https://www.ssssssss.org/magic-api/pages/plugin/git/" }, "nebula": { "name": "Nebula插件", "title": "magic-api-plugin-nebula", "description": "集成Nebula图数据库操作", "features": [ "图数据库查询支持", "nGQL语法执行", "图数据可视化", "支持复杂图查询" ], "dependencies": textwrap.dedent(''' <dependency> <groupId>org.ssssssss</groupId> <artifactId>magic-api-plugin-nebula</artifactId> <version>magic-api-lastest-version</version> </dependency> ''').strip(), "configuration": textwrap.dedent(''' nebula: hostAddress: localhost:9669 userName: root password: nebula ''').strip(), "usage": textwrap.dedent(''' import nebula; // 图查询 var ngsl = """ USE db_name; MATCH p_=(p:`assignee`)-[*3]-(p2:`transferor`) WHERE id(p2) == "阿里巴巴" or id(p)== "阿里巴巴" RETURN p_ LIMIT 1000 """; var result = nebula.executeJson(ngsl); var graphData = nebula.convert(result); return graphData; // 返回nodes和edges结构 ''').strip(), "doc": "https://www.ssssssss.org/magic-api/pages/plugin/nebula/" } } def get_plugin_docs(plugin_name: str = None) -> Any: """获取插件文档。 Args: plugin_name: 插件名称,可选值: cluster, task, redis, mongodb, elasticsearch, swagger, springdoc, git, nebula 如果不指定则返回所有插件 Returns: 指定插件的文档或所有插件文档 """ if plugin_name: return PLUGINS_KNOWLEDGE.get(plugin_name) return PLUGINS_KNOWLEDGE def list_available_plugins() -> List[str]: """获取所有可用插件名称。""" return list(PLUGINS_KNOWLEDGE.keys()) def search_plugins(keyword: str) -> List[Dict[str, Any]]: """根据关键词搜索插件。 Args: keyword: 搜索关键词 Returns: 匹配的插件列表 """ results = [] keyword_lower = keyword.lower() for plugin_name, plugin_data in PLUGINS_KNOWLEDGE.items(): if (keyword_lower in plugin_name.lower() or keyword_lower in plugin_data.get("description", "").lower() or any(keyword_lower in feature.lower() for feature in plugin_data.get("features", []))): results.append(plugin_data) return results def get_plugin_dependencies(plugin_name: str) -> str: """获取插件的Maven依赖配置。 Args: plugin_name: 插件名称 Returns: Maven依赖XML字符串 """ plugin = PLUGINS_KNOWLEDGE.get(plugin_name) if plugin and "dependencies" in plugin: return plugin["dependencies"] return "" def get_plugin_config_example(plugin_name: str) -> str: """获取插件配置示例。 Args: plugin_name: 插件名称 Returns: 配置示例字符串 """ plugin = PLUGINS_KNOWLEDGE.get(plugin_name) if not plugin: return "" examples = [] # 添加配置项示例 if "configuration" in plugin: config_items = [] for config_item in plugin["configuration"].values(): if isinstance(config_item, dict) and "key" in config_item and "example" in config_item: config_items.append(f"{config_item['key']}: {config_item['example']}") if config_items: examples.append("\n".join(config_items)) # 添加其他配置示例 for key, value in plugin.items(): if key not in ["name", "title", "description", "features", "dependencies", "configuration", "note", "doc"] and isinstance(value, str) and "example" in key.lower(): examples.append(value) return "\n\n".join(examples) if examples else "" __all__ = [ "PLUGINS_KNOWLEDGE", "get_plugin_docs", "list_available_plugins", "search_plugins", "get_plugin_dependencies", "get_plugin_config_example" ]

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

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