2025-10-15 SF.gov
What is MCP?
Spooky autocomplete
An LLM that has tools
Everything an LLM needs to know to get to a goal
And it also handles authentication
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"tools": [
{
"name": "get_weather",
"description": "Get current weather for a city",
"inputSchema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Temperature units",
"default": "celsius"
}
},
"required": ["city"]
}
},
...
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get_weather",
"arguments": {
"city": "San Francisco",
"units": "fahrenheit"
}
}
}
{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [
{
"type": "text",
"text": "Weather in San Francisco: 68°F, Partly cloudy with light fog in the morning"
}
],
"isError": false
}
}
What is MCP?
They can get better at using the tools
What is MCP?
What is MCP?
What is MCP?
What is MCP?
What is MCP?
in getting information from computers to humans
What is MCP?
*insert spooky noises*
So why not vibe?
Which is also good
But mostly because of the electricity, not the water
access to information is good
Go beyond APIs
And MCP enables vibe coding
Available in Python and TypeScript
How to do MCP?
from fastmcp import FastMCP
mcp = FastMCP("Demo 🚀")
@mcp.tool
def add(a: int, b: int) -> int:
"""Add two numbers"""
return a + b
if __name__ == "__main__":
mcp.run()
How to do MCP?
from mcp_server import mcp_server as mcp
from .models import Bird
@mcp.tool()
async def get_species_count(name: str) -> int:
'''Find the ID of a bird species by name'''
ret = await Bird.objects.filter(species__icontains=name).afirst()
if ret is None:
ret = await Bird.objects.acreate(species=name)
return ret.count
mcp-auth.dev
How to do MCP?
github.com/modelcontextprotocol/registry
/.well-known/mcp/servers.json
Takeaways #1
Takeaways #2
Takeaways #3
Takeaways #4
You can follow me on Bluesky:
🦋 @seldo.com
These slides:
slides.com/seldo/mcp