ð pihole-mcp-serer
ããŒã«ã«ð pihole-mcp-serer ã«ã€ããŠ
pihole-mcp-sererã¯ãMCPãéããŠAIã¢ã·ã¹ã¿ã³ãã«Pi-holeã®DNSèšå®ãšã¯ãšãªæ å ±ãæäŸããŸããè€æ°ã®Pi-holeã€ã³ã¹ã¿ã³ã¹ã«å¯Ÿå¿ããã€ã³ã¹ã¿ã³ã¹ãããŒã«ã«ããŽãªã«é¢ãããªãœãŒã¹ãå ¬éããŸãã
äž»ãªæ©èœ
- 01ããŒã«ã«DNSã¬ã³ãŒãã®äžèŠ§è¡šç€ºãšç·šé
- 02æè¿ã®DNSã¯ãšãªãšæŽ»åããŒã¿ã®ååŸ
- 03ãã©ã€ããªãšã»ã«ã³ããªã®Pi-holeã«å¯Ÿå¿
- 04ã€ã³ã¹ã¿ã³ã¹ãšããŒã«ã«ããŽãªã®ãªãœãŒã¹
掻çšã·ãŒã³
- 01è€æ°ã®Pi-holeã®ããŒã«ã«DNSã¬ã³ãŒãã確èª
- 02ããŒã«ã«Aã¬ã³ãŒããCNAMEã¬ã³ãŒãã远å ã»åé€
- 03æè¿ã®DNSã¯ãšãªã®æŽ»åã調æ»
MCP 察å¿
ããŒã«ã«DNSèšå®ãã¯ãšãªææšãªã©ãPi-holeã®ãªãœãŒã¹ãšããŒã«ãMCPã¯ã©ã€ã¢ã³ãã«å ¬éããŸãã
èšå®
ããŒã«ã«ãµãŒããŒã®èšå®ã¯ã©ã®ã¯ã©ã€ã¢ã³ãã§ãå ±éã§ããã³ããŒããŠã¯ã©ã€ã¢ã³ãã® MCP èšå®ãã¡ã€ã«ã«è²Œãä»ããŠãã ããã
ãã®ãµãŒããŒã®ããã±ãŒãžããªã¢ãŒããšã³ããã€ã³ãã¯ãŸã ååŸã§ããŠããŸããããããžã§ã¯ãã® README ã®æé ã«åŸã£ãŠãã ããã
ããŒã«
ããŒã«ã«ãµãŒããŒã®ããŒã«ã¯ãã·ã³äžã§èµ·åããŠåããŠååŸã§ããŸããã¡ã³ãããŒã¯ãŸã ããŒã«äžèЧãæäŸããŠããŸããã
詳现
ð pihole-mcp-serer
Pi-hole çšã® Model Context ProtocolïŒMCPïŒãµãŒããŒã§ãããã®ãµãŒããŒã¯ãAI ã¢ã·ã¹ã¿ã³ãã䜿çšã§ããããŒã«ãšã㊠Pi-hole ã®æ©èœãå ¬éããŸãã
äŸåé¢ä¿
Docker
uvïŒä»»æãéçºçšïŒ
ã¢ããªã±ãŒã·ã§ã³ãããŒã«ã«ã§å®è¡ããå Žåã¯ãuv ã䜿çšããŠãã ãããã奜ã¿ã®ããã±ãŒãžãããŒãžã£ãŒã§ã€ã³ã¹ããŒã«ããŸãã
ç°å¢
ãããžã§ã¯ãã®ã«ãŒãã« .env ãã¡ã€ã«ãäœæããPi-hole ã®èªèšŒæ
å ±ãèšè¿°ããŸãã
# Primary Pi-hole (required)
PIHOLE_URL=https://your-pihole.local/
PIHOLE_PASSWORD=your-admin-password
#PIHOLE_NAME=Primary # optional, defaults to URL if unset
# Secondary Pi-hole (optional)
#PIHOLE2_URL=https://secondary-pihole.local/
#PIHOLE2_PASSWORD=password2
#PIHOLE2_NAME=Secondary # optional
# Up to 4 Pi-holes:
#PIHOLE3_URL=...
#PIHOLE3_PASSWORD=...
#PIHOLE3_NAME=...
#PIHOLE4_URL=...
#PIHOLE4_PASSWORD=...
#PIHOLE4_NAME=...
ãããžã§ã¯ãæ§æ
ä¿å®æ§ãé«ããããããããžã§ã¯ãã¯ã¢ãžã¥ãŒã«åäœã§æ§æãããŠããŸãã
/
âââ main.py # Main application entry point
âââ tools/ # Pi-hole tools organized by functionality
â âââ __init__.py
â âââ config.py # Configuration-related tools (DNS settings)
â âââ metrics.py # Metrics and query-related tools
âââ resources/ # MCP resources
â âââ __init__.py
â âââ common.py # Common resources (piholes://, version://)
âââ docker-compose.yml # Docker Compose configuration for production
âââ docker-compose.dev.yml # Docker Compose for development with volume mounts
âââ Dockerfile # Docker build configuration
ãã®æ§æã§ã¯ããã¹ãŠã®å®è¡ã¢ãŒããšã®äºææ§ãä¿ã¡ãªãããã³ãŒããè«ççãªã³ã³ããŒãã³ãã«åå²ããŠããŸãã
ãµãŒããŒã®å®è¡
Pi-hole MCP ãµãŒããŒãå®è¡ããæ¹æ³ã¯ããã€ããããŸãã
Docker ã䜿çšããïŒæ¬çªç°å¢ã«æšå¥šïŒ
# Standard deployment
docker-compose up -d
ãµãŒããŒã¯ http://localhost:8383 ã§å©çšã§ããŸãã
Docker ã«ããéçºã¢ãŒã
éçºã§ã¯ãããŒã«ã«ã§ãã«ããã dev compose ãã¡ã€ã«ã䜿çšããŸãã
docker-compose -f docker-compose.dev.yml up
MCP Inspector
uv ãš mcp CLI ã䜿çšã㊠MCP Inspector ãå®è¡ã§ããŸãã
uv run mcp dev main.py
http://localhost:6274 ã§ã€ã³ã¿ã©ã¯ãã£ããªã€ã³ã¿ãŒãã§ãŒã¹ãèµ·åããããŒã«ããªãœãŒã¹ããã¹ãã§ããŸãã
API
ãã® MCP ãµãŒããŒã¯ã以äžã®ãªãœãŒã¹ãšããŒã«ãå ¬éããŸãã
ãªãœãŒã¹
piholes://ïŒèšå®ãããŠãããã¹ãŠã® Pi-hole ã®æ å ±ãè¿ããŸãversion://ïŒMCP ãµãŒããŒã®ããŒãžã§ã³ãè¿ããŸãlist-tools://ïŒããŒã«ã«ããŽãªã®äžèЧãè¿ããŸãlist-tools://{category}ïŒæå®ããã«ããŽãªå ã®ããŒã«äžèЧãè¿ããŸã
ããŒã«
åããŒã«åŒã³åºãã¯ã以äžã®æ§é ãæã€èŸæžã®ãªã¹ããšããŠçµæãè¿ããŸãã
[
{
"pihole": "Pi-hole Name",
"data": [...] # Result data from this Pi-hole
},
...
]
èšå®
list_local_dnsïŒPi-hole ãããã¹ãŠã®ããŒã«ã« DNS èšå®ãäžèŠ§è¡šç€ºããŸãadd_local_a_recordïŒPi-hole ã«ããŒã«ã« A ã¬ã³ãŒãã远å ããŸããadd_local_cname_recordïŒPi-hole ã«ããŒã«ã« CNAME ã¬ã³ãŒãã远å ããŸããremove_local_a_recordïŒãã¹ãåã«å¯Ÿå¿ãããã¹ãŠã® A ã¬ã³ãŒããåé€ããŸããremove_local_cname_recordïŒãã¹ãåã«å¯Ÿå¿ãããã¹ãŠã® CNAME ã¬ã³ãŒããåé€ããŸãã
ã¡ããªã¯ã¹
list_queriesïŒPi-hole ããæè¿ã® DNS ã¯ãšãªå±¥æŽãååŸããŸãlist_query_suggestionsïŒã¯ãšãªã®ãã£ã«ã¿ãŒåè£ãååŸããŸãlist_query_historyïŒã¯ãšãªã®çµæçãªã¢ã¯ãã£ããã£ã°ã©ãã®ããŒã¿ãååŸããŸã
goose ã§ã®ãã¹ã
Goose ã¯ãã¹ããéçºã«äŸ¿å©ãª CLI LLM ã¯ã©ã€ã¢ã³ãã§ããã€ã³ã¹ããŒã«æé ã¯ãã¡ããåç §ããŠãã ããã
以äžã§ã¯ãgoose configure ã«ããåæèšå®ãå®äºããŠããããšãåæãšããŸãã
ãšã¯ã¹ãã³ã·ã§ã³ã®èšå®
goose configureãšå ¥åããŠèšå®ã¡ãã¥ãŒãéããŸãã- Add Extension ãéžæããŸãã
- Remote Extension ãéžæããŸãã
- ååãå
¥åããããæ±ããããŸããååã¯äœã§ãããŸããŸãããããã§ã¯
pihole-mcpãšããŸããã - "What is the SSE endpoint URI?" ãšå°ãããããã
http://localhost:8383/sseãå ¥åããŸãã - ã¿ã€ã ã¢ãŠããå ¥åããŸãã
- å¿ èŠã«å¿ããŠèª¬æã远å ããŸãã
- ç°å¢å€æ°ã«ã€ããŠå°ããããããNo ãéžæããŸãã

ã»ãã·ã§ã³ã®éå§
ãµãŒããŒãã€ã³ã¹ããŒã«ãããããã£ããã»ãã·ã§ã³ãéå§ããŸãã
goose session
ãããŒã«ã« DNS ã¬ã³ãŒãã¯äœã§ããïŒããšå°ããŠã¿ãŠãã ããã

âŠâŠãŸãã¯ããæè¿ã® DNS ã¯ãšãªã衚瀺ããŠãã ããããšäŸé ŒããŠã¿ãŠãã ããã

Claude Desktop
Claude ã®ãã¹ã¯ãããã¯ã©ã€ã¢ã³ãã¯çŸåš STDIO ãããã³ã«ã®ã¿ããµããŒãããŠããŸããããããã·ã䜿çšã㊠SSE ãšã³ããã€ã³ããšéä¿¡ã§ããŸãã
以äžã claude_desktop_config.json ãã¡ã€ã«ã«è¿œå ããŸãã
{
"mcpServers": {
"pihole": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8383/sse"
]
}
}
}
ããŒã«ã«ãããã¯ãŒã¯äžã®å¥ã®ãã¹ãã«æ¥ç¶ããæå·åãããŠããªãæ¥ç¶ã䜿çšããå Žåã¯ã--allow-http åŒæ°ã§æç€ºçã«èš±å¯ããå¿
èŠããããŸããäŸïŒ
{
"mcpServers": {
"pihole": {
"command": "npx",
"args": [
"mcp-remote",
"http://192.168.1.255:8383/sse",
"--allow-http"
]
}
}
}
ãã®åŸãã¢ããªã±ãŒã·ã§ã³ãå®å šã«åèµ·åããŠè©ŠããŠãã ããã


ã©ã€ã»ã³ã¹
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã