Adding Git MCP server example (#343)
- Adding new example showing a single agent interacting with local MCP server for git
This commit is contained in:
commit
2261aabeeb
3 changed files with 74 additions and 1 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
# MCP Filesystem Example
|
# MCP Filesystem Example
|
||||||
|
|
||||||
This example uses the [fileystem MCP server](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem), running locally via `npx`.
|
This example uses the [filesystem MCP server](https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem), running locally via `npx`.
|
||||||
|
|
||||||
Run it via:
|
Run it via:
|
||||||
|
|
||||||
|
|
|
||||||
25
examples/mcp/git_example/README.md
Normal file
25
examples/mcp/git_example/README.md
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# MCP Git Example
|
||||||
|
|
||||||
|
This example uses the [git MCP server](https://github.com/modelcontextprotocol/servers/tree/main/src/git), running locally via `uvx`.
|
||||||
|
|
||||||
|
Run it via:
|
||||||
|
|
||||||
|
```
|
||||||
|
uv run python examples/mcp/git_example/main.py
|
||||||
|
```
|
||||||
|
|
||||||
|
## Details
|
||||||
|
|
||||||
|
The example uses the `MCPServerStdio` class from `agents`, with the command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
uvx mcp-server-git
|
||||||
|
```
|
||||||
|
Prior to running the agent, the user is prompted to provide a local directory path to their git repo. Using that, the Agent can invoke Git MCP tools like `git_log` to inspect the git commit log.
|
||||||
|
|
||||||
|
Under the hood:
|
||||||
|
|
||||||
|
1. The server is spun up in a subprocess, and exposes a bunch of tools like `git_log()`
|
||||||
|
2. We add the server instance to the Agent via `mcp_agents`.
|
||||||
|
3. Each time the agent runs, we call out to the MCP server to fetch the list of tools via `server.list_tools()`. The result is cached.
|
||||||
|
4. If the LLM chooses to use an MCP tool, we call the MCP server to run the tool via `server.run_tool()`.
|
||||||
48
examples/mcp/git_example/main.py
Normal file
48
examples/mcp/git_example/main.py
Normal file
|
|
@ -0,0 +1,48 @@
|
||||||
|
import asyncio
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
from agents import Agent, Runner, trace
|
||||||
|
from agents.mcp import MCPServer, MCPServerStdio
|
||||||
|
|
||||||
|
|
||||||
|
async def run(mcp_server: MCPServer, directory_path: str):
|
||||||
|
agent = Agent(
|
||||||
|
name="Assistant",
|
||||||
|
instructions=f"Answer questions about the git repository at {directory_path}, use that for repo_path",
|
||||||
|
mcp_servers=[mcp_server],
|
||||||
|
)
|
||||||
|
|
||||||
|
message = "Who's the most frequent contributor?"
|
||||||
|
print("\n" + "-" * 40)
|
||||||
|
print(f"Running: {message}")
|
||||||
|
result = await Runner.run(starting_agent=agent, input=message)
|
||||||
|
print(result.final_output)
|
||||||
|
|
||||||
|
message = "Summarize the last change in the repository."
|
||||||
|
print("\n" + "-" * 40)
|
||||||
|
print(f"Running: {message}")
|
||||||
|
result = await Runner.run(starting_agent=agent, input=message)
|
||||||
|
print(result.final_output)
|
||||||
|
|
||||||
|
|
||||||
|
async def main():
|
||||||
|
# Ask the user for the directory path
|
||||||
|
directory_path = input("Please enter the path to the git repository: ")
|
||||||
|
|
||||||
|
async with MCPServerStdio(
|
||||||
|
params={
|
||||||
|
"command": "uvx",
|
||||||
|
"args": [
|
||||||
|
"mcp-server-git"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
) as server:
|
||||||
|
with trace(workflow_name="MCP Git Example"):
|
||||||
|
await run(server, directory_path)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if not shutil.which("uvx"):
|
||||||
|
raise RuntimeError("uvx is not installed. Please install it with `pip install uvx`.")
|
||||||
|
|
||||||
|
asyncio.run(main())
|
||||||
Loading…
Reference in a new issue