mirror of
https://github.com/infiniflow/ragflow.git
synced 2025-12-08 20:42:30 +08:00
Feat: add MCP dashboard operations (#8460)
### What problem does this PR solve? Add MCP server dashboard operations. ### Type of change - [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
@ -107,6 +107,8 @@ class CanvasType(StrEnum):
|
||||
|
||||
class MCPServerType(StrEnum):
|
||||
SSE = "sse"
|
||||
StreamableHttp = "streamable-http"
|
||||
STREAMABLE_HTTP = "streamable-http"
|
||||
|
||||
VALID_MCP_SERVER_TYPES = {MCPServerType.SSE, MCPServerType.STREAMABLE_HTTP}
|
||||
|
||||
KNOWLEDGEBASE_FOLDER_NAME=".knowledgebase"
|
||||
|
||||
@ -806,13 +806,13 @@ class MCPServer(DataBaseModel):
|
||||
url = CharField(max_length=2048, null=False, help_text="MCP Server URL")
|
||||
server_type = CharField(max_length=32, null=False, help_text="MCP Server type")
|
||||
description = TextField(null=True, help_text="MCP Server description")
|
||||
variables = JSONField(null=True, default=[], help_text="MCP Server variables")
|
||||
headers = JSONField(null=True, default={}, help_text="MCP Server additional request headers")
|
||||
variables = JSONField(null=True, default=dict, help_text="MCP Server variables")
|
||||
headers = JSONField(null=True, default=dict, help_text="MCP Server additional request headers")
|
||||
|
||||
class Meta:
|
||||
db_table = "mcp_server"
|
||||
|
||||
|
||||
|
||||
class Search(DataBaseModel):
|
||||
id = CharField(max_length=32, primary_key=True)
|
||||
avatar = TextField(null=True, help_text="avatar base64 string")
|
||||
@ -949,6 +949,6 @@ def migrate_db():
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
migrate(migrator.add_column("mcp_server", "variables", JSONField(null=True, help_text="MCP Server variables", default=[])))
|
||||
migrate(migrator.add_column("mcp_server", "variables", JSONField(null=True, help_text="MCP Server variables", default=dict)))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
@ -13,6 +13,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
from peewee import fn
|
||||
|
||||
from api.db.db_models import DB, MCPServer
|
||||
from api.db.services.common_service import CommonService
|
||||
|
||||
@ -31,7 +33,7 @@ class MCPServerService(CommonService):
|
||||
|
||||
@classmethod
|
||||
@DB.connection_context()
|
||||
def get_servers(cls, tenant_id: str, id_list: list[str] | None = None):
|
||||
def get_servers(cls, tenant_id: str, id_list: list[str] | None, page_number, items_per_page, orderby, desc, keywords):
|
||||
"""Retrieve all MCP servers associated with a tenant.
|
||||
|
||||
This method fetches all MCP servers for a given tenant, ordered by creation time.
|
||||
@ -46,16 +48,39 @@ class MCPServerService(CommonService):
|
||||
Returns None if no MCP servers are found.
|
||||
"""
|
||||
fields = [
|
||||
cls.model.id, cls.model.name, cls.model.server_type, cls.model.url, cls.model.description,
|
||||
cls.model.variables, cls.model.update_date
|
||||
cls.model.id,
|
||||
cls.model.name,
|
||||
cls.model.server_type,
|
||||
cls.model.url,
|
||||
cls.model.description,
|
||||
cls.model.variables,
|
||||
cls.model.create_date,
|
||||
cls.model.update_date,
|
||||
]
|
||||
|
||||
servers = cls.model.select(*fields).order_by(cls.model.create_time.desc()).where(cls.model.tenant_id == tenant_id)
|
||||
query = cls.model.select(*fields).order_by(cls.model.create_time.desc()).where(cls.model.tenant_id == tenant_id)
|
||||
|
||||
if id_list is not None:
|
||||
servers = servers.where(cls.model.id.in_(id_list))
|
||||
if id_list:
|
||||
query = query.where(cls.model.id.in_(id_list))
|
||||
if keywords:
|
||||
query = query.where(fn.LOWER(cls.model.name).contains(keywords.lower()))
|
||||
if desc:
|
||||
query = query.order_by(cls.model.getter_by(orderby).desc())
|
||||
else:
|
||||
query = query.order_by(cls.model.getter_by(orderby).asc())
|
||||
if page_number and items_per_page:
|
||||
query = query.paginate(page_number, items_per_page)
|
||||
|
||||
servers = list(servers.dicts())
|
||||
servers = list(query.dicts())
|
||||
if not servers:
|
||||
return None
|
||||
return servers
|
||||
|
||||
@classmethod
|
||||
@DB.connection_context()
|
||||
def get_by_name_and_tenant(cls, name: str, tenant_id: str):
|
||||
try:
|
||||
mcp_server = cls.model.query(name=name, tenant_id=tenant_id)
|
||||
return bool(mcp_server), mcp_server
|
||||
except Exception:
|
||||
return False, None
|
||||
|
||||
Reference in New Issue
Block a user