diff --git a/README.md b/README.md
index f466376057..63039d1c24 100644
--- a/README.md
+++ b/README.md
@@ -414,6 +414,7 @@ Official integrations are maintained by companies building production ready MCP
-
**[TiDB](https://github.com/pingcap/pytidb)** - MCP Server to interact with TiDB database platform.
-
**[Tinybird](https://github.com/tinybirdco/mcp-tinybird)** - Interact with Tinybird serverless ClickHouse platform
-
**[Tldv](https://gitlab.com/tldv/tldv-mcp-server)** - Connect your AI agents to Google-Meet, Zoom & Microsoft Teams through [tl;dv](https://tldv.io)
+-
**[Todoist](https://github.com/doist/todoist-ai)** - Search, add, and update [Todoist](https://todoist.com) tasks, projects, sections, comments, and more.
-
**[Token Metrics](https://github.com/token-metrics/mcp)** - [Token Metrics](https://www.tokenmetrics.com/) integration for fetching real-time crypto market data, trading signals, price predictions, and advanced analytics.
-
**[TomTom-MCP](https://github.com/tomtom-international/tomtom-mcp)** - The [TomTom](https://www.tomtom.com/) MCP Server simplifies geospatial development by providing seamless access to TomTom's location services, including search, routing, traffic and static maps data.
-
**[Trade Agent](https://github.com/Trade-Agent/trade-agent-mcp)** - Execute stock and crypto trades on your brokerage via [Trade Agent](https://thetradeagent.ai)
@@ -575,6 +576,7 @@ A growing set of community-developed and maintained servers demonstrates various
- **[coin_api_mcp](https://github.com/longmans/coin_api_mcp)** - Provides access to [coinmarketcap](https://coinmarketcap.com/) cryptocurrency data.
- **[CoinMarketCap](https://github.com/shinzo-labs/coinmarketcap-mcp)** - Implements the complete [CoinMarketCap](https://coinmarketcap.com/) API for accessing cryptocurrency market data, exchange information, and other blockchain-related metrics.
- **[commands](https://github.com/g0t4/mcp-server-commands)** - Run commands and scripts. Just like in a terminal.
+- **[Companies House MCP](https://github.com/stefanoamorelli/companies-house-mcp)** (by Stefano Amorelli) - MCP server to connect with the UK Companies House API.
- **[computer-control-mcp](https://github.com/AB498/computer-control-mcp)** - MCP server that provides computer control capabilities, like mouse, keyboard, OCR, etc. using PyAutoGUI, RapidOCR, ONNXRuntime Without External Dependencies.
- **[Computer-Use - Remote MacOS Use](https://github.com/baryhuang/mcp-remote-macos-use)** - Open-source out-of-the-box alternative to OpenAI Operator, providing a full desktop experience and optimized for using remote macOS machines as autonomous AI agents.
- **[Congress.gov API](https://github.com/AshwinSundar/congress_gov_mcp)** - An MCP server to interact with real-time data from the Congress.gov API, which is the official API for the United States Congress.
@@ -634,6 +636,7 @@ A growing set of community-developed and maintained servers demonstrates various
- **[Docker](https://github.com/ckreiling/mcp-server-docker)** - Integrate with Docker to manage containers, images, volumes, and networks.
- **[Docker](https://github.com/0xshariq/docker-mcp-server)** - Docker MCP Server provides advanced, unified Docker management via CLI and MCP workflows, supporting containers, images, volumes, networks, and orchestration.
- **[Docs](https://github.com/da1z/docsmcp)** - Enable documentation access for the AI agent, supporting llms.txt and other remote or local files.
+- **[documcp](https://github.com/tosin2013/documcp)** - An MCP server for intelligent document processing and management, supporting multiple formats and document operations.
- **[Docy](https://github.com/oborchers/mcp-server-docy)** - Docy gives your AI direct access to the technical documentation it needs, right when it needs it. No more outdated information, broken links, or rate limits - just accurate, real-time documentation access for more precise coding assistance.
- **[Dodo Payments](https://github.com/dodopayments/dodopayments-node/tree/main/packages/mcp-server)** - Enables AI agents to securely perform payment operations via a lightweight, serverless-compatible interface to the [Dodo Payments](https://dodopayments.com) API.
- **[Domain Tools](https://github.com/deshabhishek007/domain-tools-mcp-server)** - A Model Context Protocol (MCP) server for comprehensive domain analysis: WHOIS, DNS records, and DNS health checks.
@@ -1155,6 +1158,7 @@ A growing set of community-developed and maintained servers demonstrates various
- **[Trello MCP Server](https://github.com/lioarce01/trello-mcp-server)** - An MCP server that interact with user Trello boards, modifying them with prompting.
- **[Trino](https://github.com/tuannvm/mcp-trino)** - A high-performance Model Context Protocol (MCP) server for Trino implemented in Go.
- **[Tripadvisor](https://github.com/pab1it0/tripadvisor-mcp)** - An MCP server that enables LLMs to interact with Tripadvisor API, supporting location data, reviews, and photos through standardized MCP interfaces
+- **[Triplyfy MCP](https://github.com/helpful-AIs/triplyfy-mcp)** - An MCP server that lets LLMs plan and manage itineraries with interactive maps in Triplyfy; manage itineraries, places and notes, and search/save flights.
- **[TrueNAS Core MCP](https://github.com/vespo92/TrueNasCoreMCP)** - An MCP server for interacting with TrueNAS Core.
- **[TuriX Computer Automation MCP](https://github.com/TurixAI/TuriX-CUA/tree/mac_mcp)** - MCP server for helping automation control your computer complete your pre-setting task.
- **[Tyk API Management](https://github.com/TykTechnologies/tyk-dashboard-mcp)** - Chat with all of your organization's managed APIs and perform other API lifecycle operations, managing tokens, users, analytics, and more.
diff --git a/src/git/README.md b/src/git/README.md
index 6ea2e8c836..c56ef5092f 100644
--- a/src/git/README.md
+++ b/src/git/README.md
@@ -57,10 +57,12 @@ Please note that mcp-server-git is currently in early development. The functiona
- Returns: Confirmation of reset operation
8. `git_log`
- - Shows the commit logs
+ - Shows the commit logs with optional date filtering
- Inputs:
- `repo_path` (string): Path to Git repository
- `max_count` (number, optional): Maximum number of commits to show (default: 10)
+ - `start_timestamp` (string, optional): Start timestamp for filtering commits. Accepts ISO 8601 format (e.g., '2024-01-15T14:30:25'), relative dates (e.g., '2 weeks ago', 'yesterday'), or absolute dates (e.g., '2024-01-15', 'Jan 15 2024')
+ - `end_timestamp` (string, optional): End timestamp for filtering commits. Accepts ISO 8601 format (e.g., '2024-01-15T14:30:25'), relative dates (e.g., '2 weeks ago', 'yesterday'), or absolute dates (e.g., '2024-01-15', 'Jan 15 2024')
- Returns: Array of commit entries with hash, author, date, and message
9. `git_create_branch`
diff --git a/src/git/src/mcp_server_git/server.py b/src/git/src/mcp_server_git/server.py
index f1c4e83e42..a16b6010af 100644
--- a/src/git/src/mcp_server_git/server.py
+++ b/src/git/src/mcp_server_git/server.py
@@ -48,6 +48,14 @@ class GitReset(BaseModel):
class GitLog(BaseModel):
repo_path: str
max_count: int = 10
+ start_timestamp: Optional[str] = Field(
+ None,
+ description="Start timestamp for filtering commits. Accepts: ISO 8601 format (e.g., '2024-01-15T14:30:25'), relative dates (e.g., '2 weeks ago', 'yesterday'), or absolute dates (e.g., '2024-01-15', 'Jan 15 2024')"
+ )
+ end_timestamp: Optional[str] = Field(
+ None,
+ description="End timestamp for filtering commits. Accepts: ISO 8601 format (e.g., '2024-01-15T14:30:25'), relative dates (e.g., '2 weeks ago', 'yesterday'), or absolute dates (e.g., '2024-01-15', 'Jan 15 2024')"
+ )
class GitCreateBranch(BaseModel):
repo_path: str
@@ -83,6 +91,7 @@ class GitBranch(BaseModel):
description="The commit sha that branch should NOT contain. Do not pass anything to this param if no commit sha is specified",
)
+
class GitTools(str, Enum):
STATUS = "git_status"
DIFF_UNSTAGED = "git_diff_unstaged"
@@ -125,17 +134,41 @@ def git_reset(repo: git.Repo) -> str:
repo.index.reset()
return "All staged changes reset"
-def git_log(repo: git.Repo, max_count: int = 10) -> list[str]:
- commits = list(repo.iter_commits(max_count=max_count))
- log = []
- for commit in commits:
- log.append(
- f"Commit: {commit.hexsha!r}\n"
- f"Author: {commit.author!r}\n"
- f"Date: {commit.authored_datetime}\n"
- f"Message: {commit.message!r}\n"
- )
- return log
+def git_log(repo: git.Repo, max_count: int = 10, start_timestamp: Optional[str] = None, end_timestamp: Optional[str] = None) -> list[str]:
+ if start_timestamp or end_timestamp:
+ # Use git log command with date filtering
+ args = []
+ if start_timestamp:
+ args.extend(['--since', start_timestamp])
+ if end_timestamp:
+ args.extend(['--until', end_timestamp])
+ args.extend(['--format=%H%n%an%n%ad%n%s%n'])
+
+ log_output = repo.git.log(*args).split('\n')
+
+ log = []
+ # Process commits in groups of 4 (hash, author, date, message)
+ for i in range(0, len(log_output), 4):
+ if i + 3 < len(log_output) and len(log) < max_count:
+ log.append(
+ f"Commit: {log_output[i]}\n"
+ f"Author: {log_output[i+1]}\n"
+ f"Date: {log_output[i+2]}\n"
+ f"Message: {log_output[i+3]}\n"
+ )
+ return log
+ else:
+ # Use existing logic for simple log without date filtering
+ commits = list(repo.iter_commits(max_count=max_count))
+ log = []
+ for commit in commits:
+ log.append(
+ f"Commit: {commit.hexsha!r}\n"
+ f"Author: {commit.author!r}\n"
+ f"Date: {commit.authored_datetime}\n"
+ f"Message: {commit.message!r}\n"
+ )
+ return log
def git_create_branch(repo: git.Repo, branch_name: str, base_branch: str | None = None) -> str:
if base_branch:
@@ -203,6 +236,7 @@ def git_branch(repo: git.Repo, branch_type: str, contains: str | None = None, no
return branch_info
+
async def serve(repository: Path | None) -> None:
logger = logging.getLogger(__name__)
@@ -283,6 +317,7 @@ async def list_tools() -> list[Tool]:
name=GitTools.BRANCH,
description="List Git branches",
inputSchema=GitBranch.model_json_schema(),
+
)
]
@@ -380,13 +415,19 @@ async def call_tool(name: str, arguments: dict) -> list[TextContent]:
text=result
)]
+ # Update the LOG case:
case GitTools.LOG:
- log = git_log(repo, arguments.get("max_count", 10))
+ log = git_log(
+ repo,
+ arguments.get("max_count", 10),
+ arguments.get("start_timestamp"),
+ arguments.get("end_timestamp")
+ )
return [TextContent(
type="text",
text="Commit history:\n" + "\n".join(log)
)]
-
+
case GitTools.CREATE_BRANCH:
result = git_create_branch(
repo,
@@ -423,7 +464,7 @@ async def call_tool(name: str, arguments: dict) -> list[TextContent]:
type="text",
text=result
)]
-
+
case _:
raise ValueError(f"Unknown tool: {name}")