Spaces:
Runtime error
Runtime error
Commit ·
a65e06d
1
Parent(s): 98ea76a
merged
Browse files- main.py +0 -2
- pmcp/mcp_server/{github → github_server}/__init__.py +0 -0
- pmcp/mcp_server/github_server/connection_test.py +14 -0
- pmcp/mcp_server/{github → github_server}/github.py +2 -2
- pmcp/mcp_server/{github → github_server}/mcp_github_main.py +1 -2
- pmcp/mcp_server/{github → github_server}/models.py +0 -0
- pmcp/mcp_server/{github → github_server}/services/__init__.py +0 -0
- pmcp/mcp_server/{github → github_server}/services/branches.py +1 -1
- pmcp/mcp_server/{github → github_server}/services/contents.py +0 -0
- pmcp/mcp_server/{github → github_server}/services/issues.py +0 -0
- pmcp/mcp_server/{github → github_server}/services/pull_requests.py +0 -0
- pmcp/mcp_server/{github → github_server}/services/repo.py +1 -1
- pmcp/mcp_server/{github → github_server}/services/repo_to_text.py +0 -0
- pmcp/mcp_server/{github → github_server}/tools/__init__.py +0 -0
- pmcp/mcp_server/{github → github_server}/tools/branches.py +2 -2
- pmcp/mcp_server/{github → github_server}/tools/contents.py +2 -2
- pmcp/mcp_server/{github → github_server}/tools/issues.py +2 -2
- pmcp/mcp_server/{github → github_server}/tools/pull_requests.py +2 -2
- pmcp/mcp_server/{github → github_server}/tools/repo.py +2 -2
- pmcp/mcp_server/{github → github_server}/tools/repo_to_text.py +2 -2
- pmcp/mcp_server/{github → github_server}/tools/tools.py +1 -1
- pmcp/mcp_server/{github → github_server}/utils/__init__.py +0 -0
- pmcp/mcp_server/{github → github_server}/utils/github_api.py +1 -1
- pmcp/mcp_server/{github → github_server}/utils/repo_to_text_utils.py +0 -0
- pmcp/mcp_server/{trello → trello_server}/__init__.py +0 -0
- pmcp/mcp_server/trello_server/connection_test.py +14 -0
- pmcp/mcp_server/{trello → trello_server}/dtos/update_card.py +0 -0
- pmcp/mcp_server/{trello → trello_server}/mcp_trello_main.py +2 -2
- pmcp/mcp_server/{trello → trello_server}/models.py +0 -0
- pmcp/mcp_server/{trello → trello_server}/services/__init__.py +0 -0
- pmcp/mcp_server/{trello → trello_server}/services/board.py +2 -2
- pmcp/mcp_server/{trello → trello_server}/services/card.py +2 -2
- pmcp/mcp_server/{trello → trello_server}/services/checklist.py +1 -1
- pmcp/mcp_server/{trello → trello_server}/services/list.py +2 -2
- pmcp/mcp_server/{trello → trello_server}/tools/__init__.py +0 -0
- pmcp/mcp_server/{trello → trello_server}/tools/board.py +4 -3
- pmcp/mcp_server/{trello → trello_server}/tools/card.py +4 -4
- pmcp/mcp_server/{trello → trello_server}/tools/checklist.py +2 -2
- pmcp/mcp_server/{trello → trello_server}/tools/list.py +3 -3
- pmcp/mcp_server/{trello → trello_server}/tools/tools.py +1 -1
- pmcp/mcp_server/{trello → trello_server}/trello.py +1 -1
- pmcp/mcp_server/{trello → trello_server}/utils/__init__.py +0 -0
- pmcp/mcp_server/{trello → trello_server}/utils/trello_api.py +0 -0
- pyproject.toml +1 -0
- uv.lock +45 -0
main.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
| 1 |
import os
|
| 2 |
import pprint
|
| 3 |
-
from typing import Literal
|
| 4 |
import uuid
|
| 5 |
from dotenv import load_dotenv
|
| 6 |
|
|
@@ -10,7 +9,6 @@ from langgraph.prebuilt import ToolNode
|
|
| 10 |
from langgraph.graph import MessagesState, END, StateGraph
|
| 11 |
from langchain_core.messages import HumanMessage
|
| 12 |
from langgraph.checkpoint.memory import MemorySaver
|
| 13 |
-
from langgraph.types import Command
|
| 14 |
|
| 15 |
|
| 16 |
from pmcp.agents.executor import ExecutorAgent
|
|
|
|
| 1 |
import os
|
| 2 |
import pprint
|
|
|
|
| 3 |
import uuid
|
| 4 |
from dotenv import load_dotenv
|
| 5 |
|
|
|
|
| 9 |
from langgraph.graph import MessagesState, END, StateGraph
|
| 10 |
from langchain_core.messages import HumanMessage
|
| 11 |
from langgraph.checkpoint.memory import MemorySaver
|
|
|
|
| 12 |
|
| 13 |
|
| 14 |
from pmcp.agents.executor import ExecutorAgent
|
pmcp/mcp_server/{github → github_server}/__init__.py
RENAMED
|
File without changes
|
pmcp/mcp_server/github_server/connection_test.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastmcp import Client
|
| 2 |
+
|
| 3 |
+
async def main():
|
| 4 |
+
# Connect via stdio to a local script
|
| 5 |
+
async with Client("mcp_github_main.py") as client:
|
| 6 |
+
tools = await client.list_tools()
|
| 7 |
+
print(f"Available tools: {tools}")
|
| 8 |
+
result = await client.call_tool("get_issues", {"owner":"jlowin", "repo":"fastmcp"})
|
| 9 |
+
print(f"Result: {result}")
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
if __name__ == "__main__":
|
| 13 |
+
import asyncio
|
| 14 |
+
asyncio.run(main())
|
pmcp/mcp_server/{github → github_server}/github.py
RENAMED
|
@@ -2,13 +2,13 @@ import os
|
|
| 2 |
|
| 3 |
from dotenv import load_dotenv
|
| 4 |
|
| 5 |
-
from pmcp.mcp_server.
|
| 6 |
|
| 7 |
|
| 8 |
# Load environment variables
|
| 9 |
load_dotenv()
|
| 10 |
|
| 11 |
-
|
| 12 |
# Initialize Github client and service
|
| 13 |
try:
|
| 14 |
api_key = os.getenv("GITHUB_API_KEY")
|
|
|
|
| 2 |
|
| 3 |
from dotenv import load_dotenv
|
| 4 |
|
| 5 |
+
from pmcp.mcp_server.github_server.utils.github_api import GithubClient
|
| 6 |
|
| 7 |
|
| 8 |
# Load environment variables
|
| 9 |
load_dotenv()
|
| 10 |
|
| 11 |
+
client = None
|
| 12 |
# Initialize Github client and service
|
| 13 |
try:
|
| 14 |
api_key = os.getenv("GITHUB_API_KEY")
|
pmcp/mcp_server/{github → github_server}/mcp_github_main.py
RENAMED
|
@@ -3,7 +3,7 @@ import logging
|
|
| 3 |
from dotenv import load_dotenv
|
| 4 |
from mcp.server.fastmcp import FastMCP
|
| 5 |
|
| 6 |
-
from pmcp.mcp_server.
|
| 7 |
|
| 8 |
# Configure logging
|
| 9 |
logging.basicConfig(
|
|
@@ -22,7 +22,6 @@ mcp = FastMCP("Github MCP Server")
|
|
| 22 |
register_tools(mcp)
|
| 23 |
|
| 24 |
|
| 25 |
-
|
| 26 |
if __name__ == "__main__":
|
| 27 |
try:
|
| 28 |
logger.info("Starting Github MCP Server in Stdio...")
|
|
|
|
| 3 |
from dotenv import load_dotenv
|
| 4 |
from mcp.server.fastmcp import FastMCP
|
| 5 |
|
| 6 |
+
from pmcp.mcp_server.github_server.tools.tools import register_tools
|
| 7 |
|
| 8 |
# Configure logging
|
| 9 |
logging.basicConfig(
|
|
|
|
| 22 |
register_tools(mcp)
|
| 23 |
|
| 24 |
|
|
|
|
| 25 |
if __name__ == "__main__":
|
| 26 |
try:
|
| 27 |
logger.info("Starting Github MCP Server in Stdio...")
|
pmcp/mcp_server/{github → github_server}/models.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{github → github_server}/services/__init__.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{github → github_server}/services/branches.py
RENAMED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
from pmcp.mcp_server.
|
| 2 |
|
| 3 |
|
| 4 |
class BranchService:
|
|
|
|
| 1 |
+
from pmcp.mcp_server.github_server.utils.github_api import GithubClient
|
| 2 |
|
| 3 |
|
| 4 |
class BranchService:
|
pmcp/mcp_server/{github → github_server}/services/contents.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{github → github_server}/services/issues.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{github → github_server}/services/pull_requests.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{github → github_server}/services/repo.py
RENAMED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
from pmcp.mcp_server.
|
| 2 |
|
| 3 |
|
| 4 |
class RepoService:
|
|
|
|
| 1 |
+
from pmcp.mcp_server.github_server.utils.github_api import GithubClient
|
| 2 |
|
| 3 |
|
| 4 |
class RepoService:
|
pmcp/mcp_server/{github → github_server}/services/repo_to_text.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{github → github_server}/tools/__init__.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{github → github_server}/tools/branches.py
RENAMED
|
@@ -3,8 +3,8 @@ Branch listing tool.
|
|
| 3 |
"""
|
| 4 |
from typing import List, Dict
|
| 5 |
from mcp.server.fastmcp import Context
|
| 6 |
-
from pmcp.mcp_server.
|
| 7 |
-
from pmcp.mcp_server.github import client
|
| 8 |
|
| 9 |
service = BranchService(client)
|
| 10 |
|
|
|
|
| 3 |
"""
|
| 4 |
from typing import List, Dict
|
| 5 |
from mcp.server.fastmcp import Context
|
| 6 |
+
from pmcp.mcp_server.github_server.services.branches import BranchService
|
| 7 |
+
from pmcp.mcp_server.github_server.github import client
|
| 8 |
|
| 9 |
service = BranchService(client)
|
| 10 |
|
pmcp/mcp_server/{github → github_server}/tools/contents.py
RENAMED
|
@@ -4,8 +4,8 @@ Commit and file-content tools.
|
|
| 4 |
import base64
|
| 5 |
from typing import List, Dict
|
| 6 |
from mcp.server.fastmcp import Context
|
| 7 |
-
from pmcp.mcp_server.
|
| 8 |
-
from pmcp.mcp_server.github import client
|
| 9 |
|
| 10 |
service = ContentService(client)
|
| 11 |
|
|
|
|
| 4 |
import base64
|
| 5 |
from typing import List, Dict
|
| 6 |
from mcp.server.fastmcp import Context
|
| 7 |
+
from pmcp.mcp_server.github_server.services.contents import ContentService
|
| 8 |
+
from pmcp.mcp_server.github_server.github import client
|
| 9 |
|
| 10 |
service = ContentService(client)
|
| 11 |
|
pmcp/mcp_server/{github → github_server}/tools/issues.py
RENAMED
|
@@ -4,8 +4,8 @@ MCP Tools exposing GitHub issue operations.
|
|
| 4 |
from typing import List, Dict, Any
|
| 5 |
from mcp.server.fastmcp import Context
|
| 6 |
|
| 7 |
-
from pmcp.mcp_server.
|
| 8 |
-
from pmcp.mcp_server.github import client
|
| 9 |
|
| 10 |
|
| 11 |
service = IssueService(client)
|
|
|
|
| 4 |
from typing import List, Dict, Any
|
| 5 |
from mcp.server.fastmcp import Context
|
| 6 |
|
| 7 |
+
from pmcp.mcp_server.github_server.services.issues import IssueService
|
| 8 |
+
from pmcp.mcp_server.github_server.github import client
|
| 9 |
|
| 10 |
|
| 11 |
service = IssueService(client)
|
pmcp/mcp_server/{github → github_server}/tools/pull_requests.py
RENAMED
|
@@ -3,8 +3,8 @@ Pull-request utilities (read-only).
|
|
| 3 |
"""
|
| 4 |
from typing import List, Dict
|
| 5 |
from mcp.server.fastmcp import Context
|
| 6 |
-
from pmcp.mcp_server.
|
| 7 |
-
from pmcp.mcp_server.github import client
|
| 8 |
|
| 9 |
service = PullRequestService(client)
|
| 10 |
|
|
|
|
| 3 |
"""
|
| 4 |
from typing import List, Dict
|
| 5 |
from mcp.server.fastmcp import Context
|
| 6 |
+
from pmcp.mcp_server.github_server.services.pull_requests import PullRequestService
|
| 7 |
+
from pmcp.mcp_server.github_server.github import client
|
| 8 |
|
| 9 |
service = PullRequestService(client)
|
| 10 |
|
pmcp/mcp_server/{github → github_server}/tools/repo.py
RENAMED
|
@@ -2,8 +2,8 @@
|
|
| 2 |
Repository-level stats tool.
|
| 3 |
"""
|
| 4 |
from mcp.server.fastmcp import Context
|
| 5 |
-
from pmcp.mcp_server.
|
| 6 |
-
from pmcp.mcp_server.github import client
|
| 7 |
|
| 8 |
|
| 9 |
service = RepoService(client)
|
|
|
|
| 2 |
Repository-level stats tool.
|
| 3 |
"""
|
| 4 |
from mcp.server.fastmcp import Context
|
| 5 |
+
from pmcp.mcp_server.github_server.services.repo import RepoService
|
| 6 |
+
from pmcp.mcp_server.github_server.github import client
|
| 7 |
|
| 8 |
|
| 9 |
service = RepoService(client)
|
pmcp/mcp_server/{github → github_server}/tools/repo_to_text.py
RENAMED
|
@@ -2,8 +2,8 @@
|
|
| 2 |
This module contains tools for managing Github.
|
| 3 |
"""
|
| 4 |
|
| 5 |
-
from pmcp.mcp_server.
|
| 6 |
-
from pmcp.mcp_server.github import client
|
| 7 |
|
| 8 |
from mcp.server.fastmcp import Context
|
| 9 |
|
|
|
|
| 2 |
This module contains tools for managing Github.
|
| 3 |
"""
|
| 4 |
|
| 5 |
+
from pmcp.mcp_server.github_server.services.repo_to_text import RepoToTextService
|
| 6 |
+
from pmcp.mcp_server.github_server.github import client
|
| 7 |
|
| 8 |
from mcp.server.fastmcp import Context
|
| 9 |
|
pmcp/mcp_server/{github → github_server}/tools/tools.py
RENAMED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
This module contains tools for managing Github Issues
|
| 3 |
"""
|
| 4 |
|
| 5 |
-
from pmcp.mcp_server.
|
| 6 |
|
| 7 |
|
| 8 |
def register_tools(mcp):
|
|
|
|
| 2 |
This module contains tools for managing Github Issues
|
| 3 |
"""
|
| 4 |
|
| 5 |
+
from pmcp.mcp_server.github_server.tools import issues, pull_requests, repo, repo_to_text,branches, contents
|
| 6 |
|
| 7 |
|
| 8 |
def register_tools(mcp):
|
pmcp/mcp_server/{github → github_server}/utils/__init__.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{github → github_server}/utils/github_api.py
RENAMED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
import logging
|
| 2 |
import httpx
|
| 3 |
-
from pmcp.mcp_server.
|
| 4 |
|
| 5 |
|
| 6 |
GITHUB_API_BASE = "https://api.github.com/repos"
|
|
|
|
| 1 |
import logging
|
| 2 |
import httpx
|
| 3 |
+
from pmcp.mcp_server.github_server.utils.repo_to_text_utils import fetch_file_contents, fetch_repo_sha, fetch_repo_tree, format_repo_contents, parse_repo_url
|
| 4 |
|
| 5 |
|
| 6 |
GITHUB_API_BASE = "https://api.github.com/repos"
|
pmcp/mcp_server/{github → github_server}/utils/repo_to_text_utils.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{trello → trello_server}/__init__.py
RENAMED
|
File without changes
|
pmcp/mcp_server/trello_server/connection_test.py
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from fastmcp import Client
|
| 2 |
+
|
| 3 |
+
async def main():
|
| 4 |
+
# Connect via stdio to a local script
|
| 5 |
+
async with Client("mcp_trello_main.py") as client:
|
| 6 |
+
tools = await client.list_tools()
|
| 7 |
+
print(f"Available tools: {tools}")
|
| 8 |
+
result = await client.call_tool("get_boards")
|
| 9 |
+
print(f"Result: {result}")
|
| 10 |
+
|
| 11 |
+
|
| 12 |
+
if __name__ == "__main__":
|
| 13 |
+
import asyncio
|
| 14 |
+
asyncio.run(main())
|
pmcp/mcp_server/{trello → trello_server}/dtos/update_card.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{trello → trello_server}/mcp_trello_main.py
RENAMED
|
@@ -3,7 +3,7 @@ import logging
|
|
| 3 |
from dotenv import load_dotenv
|
| 4 |
from mcp.server.fastmcp import FastMCP
|
| 5 |
|
| 6 |
-
from pmcp.mcp_server.
|
| 7 |
|
| 8 |
# Configure logging
|
| 9 |
logging.basicConfig(
|
|
@@ -27,7 +27,7 @@ if __name__ == "__main__":
|
|
| 27 |
try:
|
| 28 |
logger.info("Starting Trello MCP Server in Stdio...")
|
| 29 |
mcp.run()
|
| 30 |
-
logger.info("
|
| 31 |
except KeyboardInterrupt:
|
| 32 |
logger.info("Shutting down server...")
|
| 33 |
except Exception as e:
|
|
|
|
| 3 |
from dotenv import load_dotenv
|
| 4 |
from mcp.server.fastmcp import FastMCP
|
| 5 |
|
| 6 |
+
from pmcp.mcp_server.trello_server.tools.tools import register_tools
|
| 7 |
|
| 8 |
# Configure logging
|
| 9 |
logging.basicConfig(
|
|
|
|
| 27 |
try:
|
| 28 |
logger.info("Starting Trello MCP Server in Stdio...")
|
| 29 |
mcp.run()
|
| 30 |
+
logger.info("Trello MCP Server started successfully")
|
| 31 |
except KeyboardInterrupt:
|
| 32 |
logger.info("Shutting down server...")
|
| 33 |
except Exception as e:
|
pmcp/mcp_server/{trello → trello_server}/models.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{trello → trello_server}/services/__init__.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{trello → trello_server}/services/board.py
RENAMED
|
@@ -4,8 +4,8 @@ Service for managing Trello boards in MCP server.
|
|
| 4 |
|
| 5 |
from typing import List
|
| 6 |
|
| 7 |
-
from pmcp.mcp_server.
|
| 8 |
-
from pmcp.mcp_server.
|
| 9 |
|
| 10 |
|
| 11 |
class BoardService:
|
|
|
|
| 4 |
|
| 5 |
from typing import List
|
| 6 |
|
| 7 |
+
from pmcp.mcp_server.trello_server.models import TrelloBoard, TrelloLabel
|
| 8 |
+
from pmcp.mcp_server.trello_server.utils.trello_api import TrelloClient
|
| 9 |
|
| 10 |
|
| 11 |
class BoardService:
|
pmcp/mcp_server/{trello → trello_server}/services/card.py
RENAMED
|
@@ -4,8 +4,8 @@ Service for managing Trello cards in MCP server.
|
|
| 4 |
|
| 5 |
from typing import Any, Dict, List
|
| 6 |
|
| 7 |
-
from pmcp.mcp_server.
|
| 8 |
-
from pmcp.mcp_server.
|
| 9 |
|
| 10 |
|
| 11 |
class CardService:
|
|
|
|
| 4 |
|
| 5 |
from typing import Any, Dict, List
|
| 6 |
|
| 7 |
+
from pmcp.mcp_server.trello_server.models import TrelloCard
|
| 8 |
+
from pmcp.mcp_server.trello_server.utils.trello_api import TrelloClient
|
| 9 |
|
| 10 |
|
| 11 |
class CardService:
|
pmcp/mcp_server/{trello → trello_server}/services/checklist.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
import logging
|
| 2 |
from typing import Dict, List, Optional
|
| 3 |
|
| 4 |
-
from pmcp.mcp_server.
|
| 5 |
|
| 6 |
|
| 7 |
class ChecklistService:
|
|
|
|
| 1 |
import logging
|
| 2 |
from typing import Dict, List, Optional
|
| 3 |
|
| 4 |
+
from pmcp.mcp_server.trello_server.utils.trello_api import TrelloClient
|
| 5 |
|
| 6 |
|
| 7 |
class ChecklistService:
|
pmcp/mcp_server/{trello → trello_server}/services/list.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
from typing import List
|
| 2 |
|
| 3 |
-
from pmcp.mcp_server.
|
| 4 |
-
from pmcp.mcp_server.
|
| 5 |
|
| 6 |
|
| 7 |
class ListService:
|
|
|
|
| 1 |
from typing import List
|
| 2 |
|
| 3 |
+
from pmcp.mcp_server.trello_server.models import TrelloList
|
| 4 |
+
from pmcp.mcp_server.trello_server.utils.trello_api import TrelloClient
|
| 5 |
|
| 6 |
|
| 7 |
class ListService:
|
pmcp/mcp_server/{trello → trello_server}/tools/__init__.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{trello → trello_server}/tools/board.py
RENAMED
|
@@ -7,9 +7,9 @@ from typing import List
|
|
| 7 |
|
| 8 |
from mcp.server.fastmcp import Context
|
| 9 |
|
| 10 |
-
from pmcp.mcp_server.
|
| 11 |
-
from pmcp.mcp_server.
|
| 12 |
-
from pmcp.mcp_server.
|
| 13 |
|
| 14 |
|
| 15 |
|
|
@@ -36,6 +36,7 @@ async def get_board(ctx: Context, board_id: str) -> TrelloBoard:
|
|
| 36 |
|
| 37 |
async def get_boards(ctx: Context) -> List[TrelloBoard]:
|
| 38 |
"""Retrieves all boards for the authenticated user.
|
|
|
|
| 39 |
|
| 40 |
Returns:
|
| 41 |
List[TrelloBoard]: A list of board objects.
|
|
|
|
| 7 |
|
| 8 |
from mcp.server.fastmcp import Context
|
| 9 |
|
| 10 |
+
from pmcp.mcp_server.trello_server.models import TrelloBoard, TrelloLabel
|
| 11 |
+
from pmcp.mcp_server.trello_server.services.board import BoardService
|
| 12 |
+
from pmcp.mcp_server.trello_server.trello import client
|
| 13 |
|
| 14 |
|
| 15 |
|
|
|
|
| 36 |
|
| 37 |
async def get_boards(ctx: Context) -> List[TrelloBoard]:
|
| 38 |
"""Retrieves all boards for the authenticated user.
|
| 39 |
+
Use this method when the user specify only the Board Name and you have to retrieve the Board ID.
|
| 40 |
|
| 41 |
Returns:
|
| 42 |
List[TrelloBoard]: A list of board objects.
|
pmcp/mcp_server/{trello → trello_server}/tools/card.py
RENAMED
|
@@ -7,10 +7,10 @@ from typing import List
|
|
| 7 |
|
| 8 |
from mcp.server.fastmcp import Context
|
| 9 |
|
| 10 |
-
from pmcp.mcp_server.
|
| 11 |
-
from pmcp.mcp_server.
|
| 12 |
-
from pmcp.mcp_server.
|
| 13 |
-
from pmcp.mcp_server.
|
| 14 |
|
| 15 |
|
| 16 |
service = CardService(client)
|
|
|
|
| 7 |
|
| 8 |
from mcp.server.fastmcp import Context
|
| 9 |
|
| 10 |
+
from pmcp.mcp_server.trello_server.models import TrelloCard
|
| 11 |
+
from pmcp.mcp_server.trello_server.services.card import CardService
|
| 12 |
+
from pmcp.mcp_server.trello_server.trello import client
|
| 13 |
+
from pmcp.mcp_server.trello_server.dtos.update_card import UpdateCardPayload
|
| 14 |
|
| 15 |
|
| 16 |
service = CardService(client)
|
pmcp/mcp_server/{trello → trello_server}/tools/checklist.py
RENAMED
|
@@ -5,8 +5,8 @@ This module contains tools for managing Trello checklists.
|
|
| 5 |
import logging
|
| 6 |
from typing import Dict, List, Optional
|
| 7 |
|
| 8 |
-
from pmcp.mcp_server.
|
| 9 |
-
from pmcp.mcp_server.
|
| 10 |
|
| 11 |
service = ChecklistService(client)
|
| 12 |
|
|
|
|
| 5 |
import logging
|
| 6 |
from typing import Dict, List, Optional
|
| 7 |
|
| 8 |
+
from pmcp.mcp_server.trello_server.services.checklist import ChecklistService
|
| 9 |
+
from pmcp.mcp_server.trello_server.trello import client
|
| 10 |
|
| 11 |
service = ChecklistService(client)
|
| 12 |
|
pmcp/mcp_server/{trello → trello_server}/tools/list.py
RENAMED
|
@@ -7,9 +7,9 @@ from typing import List
|
|
| 7 |
|
| 8 |
from mcp.server.fastmcp import Context
|
| 9 |
|
| 10 |
-
from pmcp.mcp_server.
|
| 11 |
-
from pmcp.mcp_server.
|
| 12 |
-
from pmcp.mcp_server.
|
| 13 |
|
| 14 |
|
| 15 |
|
|
|
|
| 7 |
|
| 8 |
from mcp.server.fastmcp import Context
|
| 9 |
|
| 10 |
+
from pmcp.mcp_server.trello_server.models import TrelloList
|
| 11 |
+
from pmcp.mcp_server.trello_server.services.list import ListService
|
| 12 |
+
from pmcp.mcp_server.trello_server.trello import client
|
| 13 |
|
| 14 |
|
| 15 |
|
pmcp/mcp_server/{trello → trello_server}/tools/tools.py
RENAMED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
This module contains tools for managing Trello boards, lists, and cards.
|
| 3 |
"""
|
| 4 |
|
| 5 |
-
from pmcp.mcp_server.
|
| 6 |
|
| 7 |
|
| 8 |
def register_tools(mcp):
|
|
|
|
| 2 |
This module contains tools for managing Trello boards, lists, and cards.
|
| 3 |
"""
|
| 4 |
|
| 5 |
+
from pmcp.mcp_server.trello_server.tools import board, card, checklist, list
|
| 6 |
|
| 7 |
|
| 8 |
def register_tools(mcp):
|
pmcp/mcp_server/{trello → trello_server}/trello.py
RENAMED
|
@@ -3,7 +3,7 @@ import os
|
|
| 3 |
|
| 4 |
from dotenv import load_dotenv
|
| 5 |
|
| 6 |
-
from pmcp.mcp_server.
|
| 7 |
|
| 8 |
|
| 9 |
# Load environment variables
|
|
|
|
| 3 |
|
| 4 |
from dotenv import load_dotenv
|
| 5 |
|
| 6 |
+
from pmcp.mcp_server.trello_server.utils.trello_api import TrelloClient
|
| 7 |
|
| 8 |
|
| 9 |
# Load environment variables
|
pmcp/mcp_server/{trello → trello_server}/utils/__init__.py
RENAMED
|
File without changes
|
pmcp/mcp_server/{trello → trello_server}/utils/trello_api.py
RENAMED
|
File without changes
|
pyproject.toml
CHANGED
|
@@ -15,6 +15,7 @@ dependencies = [
|
|
| 15 |
"httpx>=0.28.1",
|
| 16 |
"requests>=2.32.3",
|
| 17 |
"grandalf>=0.8",
|
|
|
|
| 18 |
]
|
| 19 |
|
| 20 |
[dependency-groups]
|
|
|
|
| 15 |
"httpx>=0.28.1",
|
| 16 |
"requests>=2.32.3",
|
| 17 |
"grandalf>=0.8",
|
| 18 |
+
"fastmcp>=2.5.2",
|
| 19 |
]
|
| 20 |
|
| 21 |
[dependency-groups]
|
uv.lock
CHANGED
|
@@ -324,6 +324,18 @@ wheels = [
|
|
| 324 |
{ url = "https://files.pythonhosted.org/packages/bf/6c/e36d22e76f4aa4e1ea7ea9b443bd49b5ffd2f13d430840f47e35284f797a/duckduckgo_search-8.0.2-py3-none-any.whl", hash = "sha256:b5ff8b6b8f169b8e1b15a788a5749aa900ebcefd6e1ab485787582f8d5b4f1ef", size = 18184, upload-time = "2025-05-15T08:43:23.713Z" },
|
| 325 |
]
|
| 326 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 327 |
[[package]]
|
| 328 |
name = "fastapi"
|
| 329 |
version = "0.115.12"
|
|
@@ -338,6 +350,25 @@ wheels = [
|
|
| 338 |
{ url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d", size = 95164, upload-time = "2025-03-23T22:55:42.101Z" },
|
| 339 |
]
|
| 340 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 341 |
[[package]]
|
| 342 |
name = "ffmpy"
|
| 343 |
version = "0.5.0"
|
|
@@ -1172,6 +1203,18 @@ wheels = [
|
|
| 1172 |
{ url = "https://files.pythonhosted.org/packages/a8/d9/7ec61c010f0d0b0bc57dab8b8dff398f84230d269e8bfa068ad542ff050c/openai-1.82.1-py3-none-any.whl", hash = "sha256:334eb5006edf59aa464c9e932b9d137468d810b2659e5daea9b3a8c39d052395", size = 720466, upload-time = "2025-05-29T16:15:12.531Z" },
|
| 1173 |
]
|
| 1174 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1175 |
[[package]]
|
| 1176 |
name = "orjson"
|
| 1177 |
version = "3.10.18"
|
|
@@ -1332,6 +1375,7 @@ name = "pmcp"
|
|
| 1332 |
version = "0.1.0"
|
| 1333 |
source = { virtual = "." }
|
| 1334 |
dependencies = [
|
|
|
|
| 1335 |
{ name = "gradio", extra = ["mcp"] },
|
| 1336 |
{ name = "grandalf" },
|
| 1337 |
{ name = "httpx" },
|
|
@@ -1352,6 +1396,7 @@ dev = [
|
|
| 1352 |
|
| 1353 |
[package.metadata]
|
| 1354 |
requires-dist = [
|
|
|
|
| 1355 |
{ name = "gradio", extras = ["mcp"], specifier = ">=5.32.0" },
|
| 1356 |
{ name = "grandalf", specifier = ">=0.8" },
|
| 1357 |
{ name = "httpx", specifier = ">=0.28.1" },
|
|
|
|
| 324 |
{ url = "https://files.pythonhosted.org/packages/bf/6c/e36d22e76f4aa4e1ea7ea9b443bd49b5ffd2f13d430840f47e35284f797a/duckduckgo_search-8.0.2-py3-none-any.whl", hash = "sha256:b5ff8b6b8f169b8e1b15a788a5749aa900ebcefd6e1ab485787582f8d5b4f1ef", size = 18184, upload-time = "2025-05-15T08:43:23.713Z" },
|
| 325 |
]
|
| 326 |
|
| 327 |
+
[[package]]
|
| 328 |
+
name = "exceptiongroup"
|
| 329 |
+
version = "1.3.0"
|
| 330 |
+
source = { registry = "https://pypi.org/simple" }
|
| 331 |
+
dependencies = [
|
| 332 |
+
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
| 333 |
+
]
|
| 334 |
+
sdist = { url = "https://files.pythonhosted.org/packages/0b/9f/a65090624ecf468cdca03533906e7c69ed7588582240cfe7cc9e770b50eb/exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88", size = 29749, upload-time = "2025-05-10T17:42:51.123Z" }
|
| 335 |
+
wheels = [
|
| 336 |
+
{ url = "https://files.pythonhosted.org/packages/36/f4/c6e662dade71f56cd2f3735141b265c3c79293c109549c1e6933b0651ffc/exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10", size = 16674, upload-time = "2025-05-10T17:42:49.33Z" },
|
| 337 |
+
]
|
| 338 |
+
|
| 339 |
[[package]]
|
| 340 |
name = "fastapi"
|
| 341 |
version = "0.115.12"
|
|
|
|
| 350 |
{ url = "https://files.pythonhosted.org/packages/50/b3/b51f09c2ba432a576fe63758bddc81f78f0c6309d9e5c10d194313bf021e/fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d", size = 95164, upload-time = "2025-03-23T22:55:42.101Z" },
|
| 351 |
]
|
| 352 |
|
| 353 |
+
[[package]]
|
| 354 |
+
name = "fastmcp"
|
| 355 |
+
version = "2.5.2"
|
| 356 |
+
source = { registry = "https://pypi.org/simple" }
|
| 357 |
+
dependencies = [
|
| 358 |
+
{ name = "exceptiongroup" },
|
| 359 |
+
{ name = "httpx" },
|
| 360 |
+
{ name = "mcp" },
|
| 361 |
+
{ name = "openapi-pydantic" },
|
| 362 |
+
{ name = "python-dotenv" },
|
| 363 |
+
{ name = "rich" },
|
| 364 |
+
{ name = "typer" },
|
| 365 |
+
{ name = "websockets" },
|
| 366 |
+
]
|
| 367 |
+
sdist = { url = "https://files.pythonhosted.org/packages/20/cc/d2c0e63d2b34681bef4e077611dae662ea722add13a83dc4ae08b6e0fd23/fastmcp-2.5.2.tar.gz", hash = "sha256:761c92fb54f561136f631d7d98b4920152978f6f0a66a4cef689a7983fd05c8b", size = 1039189, upload-time = "2025-05-29T18:11:33.088Z" }
|
| 368 |
+
wheels = [
|
| 369 |
+
{ url = "https://files.pythonhosted.org/packages/3e/ac/caa94ff747e2136829ac2fea33b9583e086ca5431451751bcb2f773e087f/fastmcp-2.5.2-py3-none-any.whl", hash = "sha256:4ea46ef35c1308b369eff7c8a10e4c9639bed046fd646449c1227ac7c3856d83", size = 107502, upload-time = "2025-05-29T18:11:31.577Z" },
|
| 370 |
+
]
|
| 371 |
+
|
| 372 |
[[package]]
|
| 373 |
name = "ffmpy"
|
| 374 |
version = "0.5.0"
|
|
|
|
| 1203 |
{ url = "https://files.pythonhosted.org/packages/a8/d9/7ec61c010f0d0b0bc57dab8b8dff398f84230d269e8bfa068ad542ff050c/openai-1.82.1-py3-none-any.whl", hash = "sha256:334eb5006edf59aa464c9e932b9d137468d810b2659e5daea9b3a8c39d052395", size = 720466, upload-time = "2025-05-29T16:15:12.531Z" },
|
| 1204 |
]
|
| 1205 |
|
| 1206 |
+
[[package]]
|
| 1207 |
+
name = "openapi-pydantic"
|
| 1208 |
+
version = "0.5.1"
|
| 1209 |
+
source = { registry = "https://pypi.org/simple" }
|
| 1210 |
+
dependencies = [
|
| 1211 |
+
{ name = "pydantic" },
|
| 1212 |
+
]
|
| 1213 |
+
sdist = { url = "https://files.pythonhosted.org/packages/02/2e/58d83848dd1a79cb92ed8e63f6ba901ca282c5f09d04af9423ec26c56fd7/openapi_pydantic-0.5.1.tar.gz", hash = "sha256:ff6835af6bde7a459fb93eb93bb92b8749b754fc6e51b2f1590a19dc3005ee0d", size = 60892, upload-time = "2025-01-08T19:29:27.083Z" }
|
| 1214 |
+
wheels = [
|
| 1215 |
+
{ url = "https://files.pythonhosted.org/packages/12/cf/03675d8bd8ecbf4445504d8071adab19f5f993676795708e36402ab38263/openapi_pydantic-0.5.1-py3-none-any.whl", hash = "sha256:a3a09ef4586f5bd760a8df7f43028b60cafb6d9f61de2acba9574766255ab146", size = 96381, upload-time = "2025-01-08T19:29:25.275Z" },
|
| 1216 |
+
]
|
| 1217 |
+
|
| 1218 |
[[package]]
|
| 1219 |
name = "orjson"
|
| 1220 |
version = "3.10.18"
|
|
|
|
| 1375 |
version = "0.1.0"
|
| 1376 |
source = { virtual = "." }
|
| 1377 |
dependencies = [
|
| 1378 |
+
{ name = "fastmcp" },
|
| 1379 |
{ name = "gradio", extra = ["mcp"] },
|
| 1380 |
{ name = "grandalf" },
|
| 1381 |
{ name = "httpx" },
|
|
|
|
| 1396 |
|
| 1397 |
[package.metadata]
|
| 1398 |
requires-dist = [
|
| 1399 |
+
{ name = "fastmcp", specifier = ">=2.5.2" },
|
| 1400 |
{ name = "gradio", extras = ["mcp"], specifier = ">=5.32.0" },
|
| 1401 |
{ name = "grandalf", specifier = ">=0.8" },
|
| 1402 |
{ name = "httpx", specifier = ">=0.28.1" },
|