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" },
|