initial mcp server setup
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
"""
|
||||
Text Processing Tools for MCP
|
||||
"""
|
||||
import re
|
||||
from typing import List
|
||||
from ..core.types import MCPTool
|
||||
|
||||
|
||||
class TextTools:
|
||||
"""Collection of text processing tools"""
|
||||
|
||||
@staticmethod
|
||||
def get_tools() -> List[MCPTool]:
|
||||
"""Get all text tools"""
|
||||
return [
|
||||
TextTools._create_word_count_tool(),
|
||||
TextTools._create_text_search_tool(),
|
||||
TextTools._create_text_replace_tool(),
|
||||
TextTools._create_text_uppercase_tool(),
|
||||
TextTools._create_text_lowercase_tool(),
|
||||
TextTools._create_text_length_tool(),
|
||||
TextTools._create_generate_greeting_tool(),
|
||||
]
|
||||
|
||||
@staticmethod
|
||||
def _create_word_count_tool() -> MCPTool:
|
||||
"""Create word count tool"""
|
||||
async def count_words(text: str) -> int:
|
||||
"""Count the number of words in a text"""
|
||||
words = text.strip().split()
|
||||
return len(words)
|
||||
|
||||
return MCPTool(
|
||||
name="count_words",
|
||||
description="Count the number of words in a text",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {"type": "string", "description": "Text to count words in"},
|
||||
},
|
||||
"required": ["text"],
|
||||
},
|
||||
handler=count_words,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_text_search_tool() -> MCPTool:
|
||||
"""Create text search tool"""
|
||||
async def search_text(text: str, pattern: str, case_sensitive: bool = False) -> List[str]:
|
||||
"""Search for a pattern in text and return all matches"""
|
||||
flags = 0 if case_sensitive else re.IGNORECASE
|
||||
matches = re.findall(pattern, text, flags)
|
||||
return matches
|
||||
|
||||
return MCPTool(
|
||||
name="search_text",
|
||||
description="Search for a pattern in text and return all matches",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {"type": "string", "description": "Text to search in"},
|
||||
"pattern": {"type": "string", "description": "Regular expression pattern to search for"},
|
||||
"case_sensitive": {"type": "boolean", "description": "Whether search should be case sensitive", "default": False},
|
||||
},
|
||||
"required": ["text", "pattern"],
|
||||
},
|
||||
handler=search_text,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_text_replace_tool() -> MCPTool:
|
||||
"""Create text replace tool"""
|
||||
async def replace_text(text: str, old_pattern: str, new_text: str) -> str:
|
||||
"""Replace all occurrences of a pattern in text"""
|
||||
return text.replace(old_pattern, new_text)
|
||||
|
||||
return MCPTool(
|
||||
name="replace_text",
|
||||
description="Replace all occurrences of a pattern in text",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {"type": "string", "description": "Original text"},
|
||||
"old_pattern": {"type": "string", "description": "Text to replace"},
|
||||
"new_text": {"type": "string", "description": "Replacement text"},
|
||||
},
|
||||
"required": ["text", "old_pattern", "new_text"],
|
||||
},
|
||||
handler=replace_text,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_text_uppercase_tool() -> MCPTool:
|
||||
"""Create uppercase tool"""
|
||||
async def to_uppercase(text: str) -> str:
|
||||
"""Convert text to uppercase"""
|
||||
return text.upper()
|
||||
|
||||
return MCPTool(
|
||||
name="to_uppercase",
|
||||
description="Convert text to uppercase",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {"type": "string", "description": "Text to convert to uppercase"},
|
||||
},
|
||||
"required": ["text"],
|
||||
},
|
||||
handler=to_uppercase,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_text_lowercase_tool() -> MCPTool:
|
||||
"""Create lowercase tool"""
|
||||
async def to_lowercase(text: str) -> str:
|
||||
"""Convert text to lowercase"""
|
||||
return text.lower()
|
||||
|
||||
return MCPTool(
|
||||
name="to_lowercase",
|
||||
description="Convert text to lowercase",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {"type": "string", "description": "Text to convert to lowercase"},
|
||||
},
|
||||
"required": ["text"],
|
||||
},
|
||||
handler=to_lowercase,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_text_length_tool() -> MCPTool:
|
||||
"""Create text length tool"""
|
||||
async def text_length(text: str) -> int:
|
||||
"""Get the length of text"""
|
||||
return len(text)
|
||||
|
||||
return MCPTool(
|
||||
name="text_length",
|
||||
description="Get the length of text (number of characters)",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"text": {"type": "string", "description": "Text to measure length of"},
|
||||
},
|
||||
"required": ["text"],
|
||||
},
|
||||
handler=text_length,
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _create_generate_greeting_tool() -> MCPTool:
|
||||
"""Create greeting generation tool"""
|
||||
async def generate_greeting(name: str, style: str = "casual") -> str:
|
||||
"""Generate a personalized greeting"""
|
||||
name = name.strip()
|
||||
if not name:
|
||||
raise ValueError("Name cannot be empty")
|
||||
|
||||
if style == "casual":
|
||||
return f"Hey {name}! Welcome! 👋"
|
||||
elif style == "formal":
|
||||
return f"Good day, {name}. Welcome to our platform."
|
||||
elif style == "professional":
|
||||
return f"Hello, {name}. Thank you for joining us."
|
||||
else:
|
||||
return f"Hi {name}! Welcome!"
|
||||
|
||||
return MCPTool(
|
||||
name="generate_greeting",
|
||||
description="Generate a personalized greeting with different styles",
|
||||
input_schema={
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string", "description": "Person's name"},
|
||||
"style": {
|
||||
"type": "string",
|
||||
"enum": ["casual", "formal", "professional"],
|
||||
"description": "Greeting style",
|
||||
"default": "casual"
|
||||
},
|
||||
},
|
||||
"required": ["name"],
|
||||
},
|
||||
handler=generate_greeting,
|
||||
)
|
||||
Reference in New Issue
Block a user