ð Civicnet MCP Server â Model Context Protocol
ããŒã«ã«ð Civicnet MCP Server â Model Context Protocol ã«ã€ããŠ
Civicnet MCP Serverã¯ãå°åã»éœåžã»çµç¹ã®ããŒãåããªãŒãã³ãœãŒã¹MCPãµãŒããŒã§ããå°åããŒã¿ç®¡çè ãéçºè ã察象ã«ãå°åã®ååã«æ²¿ã£ãåºå確èªãããŒã«ã«ããŒã¿ã®æŽ»çšãããŒãé飿ºãšç£æ»èšé²ãæäŸããŸãã
äž»ãªæ©èœ
- 01å°åããŒã¿ã®åã蟌ã¿ãšæ€èšŒ
- 02å°åã®ååã«åºã¥ãåºå確èª
- 03ã¢ãžã¥ãŒã«åŒãšãŒãžã§ã³ããšã·ãã¥ã¬ãŒã·ã§ã³
- 04ããŒãéã®ãªããã€ã³é£æº
- 05ç£æ»å¯èœãªãã°ã®èšé²
掻çšã·ãŒã³
- 01äœå® ã»æ°åã»äºç®ã®ã·ããªãªåæ
- 02åå åäºç®ç·šæã®ã·ãã¥ã¬ãŒã·ã§ã³
- 03å°åããã·ã¥ããŒãåãããŒã¿APIã®æäŸ
- 04åããååãšã®æŽåæ§ã®ç¢ºèª
MCP 察å¿
å°åããŒãã«ããŒã¿ãããŒã«ãã¯ãšãªçšã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããMCPãµãŒããŒã§ããä»ã®MCPããŒããšã®é£æºã«ã察å¿ããŸãã
èšå®
ããŒã«ã«ãµãŒããŒã®èšå®ã¯ã©ã®ã¯ã©ã€ã¢ã³ãã§ãå ±éã§ããã³ããŒããŠã¯ã©ã€ã¢ã³ãã® MCP èšå®ãã¡ã€ã«ã«è²Œãä»ããŠãã ããã
ãã®ãµãŒããŒã®ããã±ãŒãžããªã¢ãŒããšã³ããã€ã³ãã¯ãŸã ååŸã§ããŠããŸããããããžã§ã¯ãã® README ã®æé ã«åŸã£ãŠãã ããã
ããŒã«
ããŒã«ã«ãµãŒããŒã®ããŒã«ã¯ãã·ã³äžã§èµ·åããŠåããŠååŸã§ããŸããã¡ã³ãããŒã¯ãŸã ããŒã«äžèЧãæäŸããŠããŸããã
詳现
ð Civicnet MCP ãµãŒã㌠â Model Context Protocol
å
¬åŒãªãŒãã³ãœãŒã¹ MCP ãµãŒããŒãžããããã
ããã¯ãKonstellation ãš CivicNet ã®é£åååžæ°ã€ã³ãã©ã®äžæ žã§ããå°åã«æ ¹ããããä¿¡é Œã§ãããšãŒãžã§ã³ãåã³ãã¥ãã㣠AI ãå®è¡ããããã®ãã¢ãžã¥ãŒã«åŒã§ååãéèŠãããµãŒããŒã§ãã
ð§ MCP ãµãŒããŒãšã¯ïŒ
MCP ãµãŒããŒã¯ãCivicNet/Konstellation ã°ãªããã«ããã**è¿é£ãéœåžãçµç¹ã¬ãã«ã®ãããŒãã**ãæ¯ããŸããåããŒãã¯æ¬¡ã®æ©èœãåããŠããŸãã
- å°åããŒã¿ïŒGISãæ¿çãã³ãã¥ããã£ã®ç©èªãå ¬éèšé²ïŒãåã蟌ã¿ãæ€èšŒããŸã
- ãšãŒãžã§ã³ãåã¢ãã«ïŒæšè«ãèªå·±ç£æ»ãã·ãã¥ã¬ãŒã·ã§ã³ãããŒã«ãã¬ã€ãªã©ïŒããã¹ããããªãŒã±ã¹ãã¬ãŒã·ã§ã³ããŸã
- ãã¹ãŠã®ã¯ãšãªãšåºåã«åžæ°ååïŒå ¬å¹³æ§ãç宿§ããã©ã€ãã·ãŒãéææ§ïŒãé©çšããŸã
- ããã·ã¥ããŒããGIS ã¯ã©ã€ã¢ã³ããå€éšããŒãããŒåãã«ãå®å šã§ææžåããã API ãå ¬éããŸã
- ä»ã® MCP ããŒããšé£æºããŠãã¬ããžãå ±æããªãããå°åã®ç®¡çæš©ãç¶æããŸã
ãªãå¿
èŠãªã®ã§ããããïŒ
ãã¹ãŠã®ã³ãã¥ããã£ããèªãã®åžæ°ã€ã³ããªãžã§ã³ã¹ãææãã管çããç¶ç¶çã«æ¹åã§ããããã«ããããã§ãããã©ãã¯ããã¯ã¹ãããã³ããŒããã¯ã€ã³ããæ°ã¥ãããªããã€ã¢ã¹ããããŸããã
ð äž»ãªæ©èœ
- LLM éäŸåïŒ ææ°ã®ããããèšèªã¢ãã«ïŒOpenAIãAnthropicããªãŒãã³ãœãŒã¹ïŒãæ¥ç¶ã§ããŸã
- ã¯ã©ãŠãéäŸåïŒ ã¯ã©ãŠãããªã³ãã¬ãã¹ããšããžããŸãã¯ããŒã«ã«ããã€ã¹ã«ãããã€ã§ããŸã
- ååãªããžããªïŒ ã³ãã¥ããã£ã®ååãã³ãŒãã§å®çŸ©ãç£æ»ãçºå±ãããããšãã§ããŸã
- ã¢ãžã¥ãŒã«åŒãšãŒãžã§ã³ãããžãã¯ïŒ æèã®é£éãèªå·±çå¯ãããŒã«ã·ãã¥ã¬ãŒã·ã§ã³ããã«ããšãŒãžã§ã³ãã«ããèšè«ãªã©ã«å¯Ÿå¿ããŸã
- ããŒã¿ç®¡çïŒ å°åã®ããŒã¿ããªãŒãã³ããŒã¿ãé£ååã®åžæ°ããŒã¿ã«å¯Ÿå¿ãããã现ããªã³ãã¯ã¿ãŒãåããŠããŸã
- ã·ãã¥ã¬ãŒã·ã§ã³å¯Ÿå¿ïŒ ãããããã®ã·ããªãªãåå åã·ãã¥ã¬ãŒã·ã§ã³ãå®è¡ã§ããŸã
- å®å šãªç£æ»èšŒè·¡ïŒ ãã¹ãŠã®åºåããšãŒãžã§ã³ãã®åŠç段éãããŒã¿ãœãŒã¹ãèšé²ããã確èªã§ããŸã
- Docker åïŒ ããŒã«ã«ã§ã忣ç°å¢ã§ããç°¡åã«ã³ã³ãããŒãã»ããã¢ããã§ããŸã
ð ãã£ã¬ã¯ããªæŠèŠ
| ãã©ã«ã㌠| çšé |
|---|---|
src/agents | ãšãŒãžã§ã³ãåã¢ãã«ïŒæšè«ãã¢ã©ã€ã¡ã³ããã·ãã¥ã¬ãŒã·ã§ã³ïŒ |
src/api | ã¯ãšãªãããŒã¿ãããŒã«åãã® REST/GraphQL API |
src/principles | ååãªããžããªïŒYAML/JSON ïŒ ããžãã¯ïŒ |
src/data | ããŒã¿ã®åã蟌ã¿ãæ€èšŒãã³ãã¯ã¿ãŒ |
src/prompts | ããã³ããã®ãã³ãã¬ãŒããšã·ããªãªã¹ã¯ãªãã |
src/simulation | ã·ãã¥ã¬ãŒã·ã§ã³ãã·ããªãªã®ã¢ããªã³ã°ããžã㯠|
src/utils | ãã®ã³ã°ãç£æ»ããã«ããŒé¢æ° |
config/ | ããŒãèšå®ãæå¹åããæ©èœã.env ãã³ãã¬ãŒã |
scripts/ | éçºããã¹ããç§»è¡çšã¹ã¯ãªãã |
tests/ | åäœãã¹ããšçµ±åãã¹ã |
â¡ïž ã¯ã€ãã¯ã¹ã¿ãŒãïŒããŒã«ã« Docker ComposeïŒ
-
ãªããžããªãã¯ããŒã³ããŸãïŒ
git clone https://github.com/PublikPrinciple/civicnet-mcp-server.git cd civicnet-mcp-server -
ç°å¢å€æ°ãã³ããŒããŠç·šéããŸãïŒ
cp config/.env.example .env # Edit .env with your API keys, DB, LLM settings, etc. -
MCP ãµãŒããŒïŒããã³ä»»æã®ããŒã¿ãµãŒãã¹ïŒãèµ·åããŸãïŒ
docker-compose up --build -
API ããã¥ã¡ã³ãã衚瀺ããŸãïŒ
http://localhost:4000/docsã«ã¢ã¯ã»ã¹ããŸãïŒããã©ã«ãã§ã¯ Swagger/OpenAPIïŒ
ð ïž åºæ¬æŠå¿µ
ååãªããžããª
- ãã¹ãŠã®åºåã¯ãã³ãã¥ããã£ã®åºæ¬ååïŒäŸïŒãå ¬å¹³æ§ã確ä¿ããããå±å®³ãé¿ããããæ å ±æºãåŒçšãããïŒã«æ²¿ãããã確èªããã£ã«ã¿ãªã³ã°ããŸãã¯æžãæããããŸãã
/src/principles/å ã® YAML/JSON ã䜿ã£ãŠååãæŽæ°ããŸãã
ãšãŒãžã§ã³ããšãšãŒãžã§ã³ãããžãã¯
- æèã®é£éãšãŒãžã§ã³ãïŒ éææ§ãé«ããããã®æ®µéçãªããžãã¯
- èªå·±çå¯ãšãŒãžã§ã³ãïŒ èªèº«ã®ãã€ã¢ã¹ãããžãã¯ãã³ã³ãã©ã€ã¢ã³ã¹ã確èªããŸã
- ããŒã«ã·ãã¥ã¬ãŒã·ã§ã³ãšãŒãžã§ã³ãïŒ èšè«ïŒèšç»æ åœè å¯Ÿäœæ°ïŒãå°éå®¶ããã«ãæŽå²çèŠç¹ãã·ãã¥ã¬ãŒãããŸã
- ãã«ããšãŒãžã§ã³ã飿ºïŒ ã·ããªãªãã¹ããåå åäºç®ç·šæãã¬ããããŒãã³ã°ã«å¯Ÿå¿ããŸã
- åãšãŒãžã§ã³ãã®ããžãã¯ã¯ã¢ãžã¥ãŒã«åŒã§çµã¿åããå¯èœã§ãïŒ
/src/agents/ãåç §ïŒã
ããŒã¿ã¬ã€ã€ãŒ
- GISãåœå¢èª¿æ»ãå°åã® CSVãAPI ãªã©ã«å¯Ÿå¿ããã³ãã¯ã¿ãŒ
- ãã©ã€ãã·ãŒãšããŒã¿ã®è¡ç管çã®ããã®æ€èšŒïŒå¢šæ¶ãã¹ããã
- 飿ºïŒ ä¿¡é Œã§ããããŒããšå ±æïŒéžæçã«å ±æã§ããŸãïŒãªããã€ã³ïŒ
ããã³ãããšã·ããªãªã®ãã³ãã¬ãŒã
- ãšãŒãžã§ã³ãã«ããæšè«ã¯ãã¹ãŠãããã³ãããã³ãã¬ãŒãã«ãã£ãŠå®è¡ãããŸãïŒ
/src/prompts/ãåç §ïŒ - ç¬èªã®ãã³ãã¬ãŒããäœæããããçµã¿èŸŒã¿ã®åžæ°äºäŸç ç©¶ããã³ã·ãã¥ã¬ãŒã·ã§ã³çšãã³ãã¬ãŒãã䜿çšããŸã
ã·ãã¥ã¬ãŒã·ã§ã³
- å®ããŒã¿ãšåæããŒã¿ã䜿çšããŠããããããã®æªæ¥ïŒäœå® ãæ°åãäºç®ãªã©ïŒãã¢ãã«åããŸã
- åºåã¯ã€ã³ã¿ã©ã¯ãã£ãã§ãååã«åºã¥ãç£æ»ãåããŠããŸã
ð 䜿çšäŸ
- å°å³ãã¿ã€ã ã©ã€ã³ãå ¬å¹³æ§åæãå«ã¿ãGIS ãšäžè¬å ¬éã¬ãã¥ãŒã«ãã䜿ãããããŒã©ã äœå® 屿©ãã®ã±ãŒã¹ã¹ã¿ãã£ãçæãã
- å°åäœæ°ã®ãšãŒãžã§ã³ãå士ã®ããŒã«ãã¬ã€åœ¢åŒã®è°è«ãéããŠãåå åäºç®ç·šæã®ã·ãã¥ã¬ãŒã·ã§ã³ãæ¯æŽãã
- å°åã®ããã·ã¥ããŒãåãã«ãå¹³æãªèšèã§ååã«æ²¿ã£ãããŒã¿ API ãå ¬éãã
- ãã¹ãŠã®åºåã«ã€ããŠããã€ã¢ã¹ã誀ããã³ãã¥ããã£ã®ååã«ç §ãããŠç£æ»ããïŒãã°ãšãã£ãŒãããã¯ãå«ãïŒ
- ä»ã®è¿é£å°åãéœåžãšé£æºããå°ååæãæ¯èŒãåæ§æãæ¹åãã
ð§âð» éçºè åã
- èšèªïŒ ããã©ã«ãã§ã¯ TypeScript/Node.js ã䜿çšããPython ãšãŒãžã§ã³ããšã®äºææ§ã¯ããŒããããã«ãããŸã
- ã³ã³ããªãã¥ãŒã·ã§ã³ïŒ ãã©ã³ãéçšãã³ãŒãã¹ã¿ã€ã«ãååãžã®æºæ ã確èªãã PR ãã§ãã¯ã«ã€ããŠã¯ã
CONTRIBUTING.mdãåç §ããŠãã ãã - ãã¹ãïŒ
npm testïŒJestïŒããŸãã¯docker-compose -f docker-compose.test.yml upãå®è¡ããŠãã¹ãŠã®ãã¹ããå®è¡ããŸã
ðïž åžæ°ããŒã¿ç®¡çè åã
- ååäž»å°ã®ã¬ããã³ã¹ïŒ
/src/principles/ãç·šéããŠãããŒãã®äŸ¡å€èŠ³ãæŽæ°ããŸã - ãã°ãšç£æ»ïŒ ãã¹ãŠã®åçã远跡ã§ããŸãïŒèª°ã質åããããã©ã®ããŒã¿ã䜿ã£ãããã©ã®ãšãŒãžã§ã³ãã䜿çšããããã©ã®ãã§ãã¯ãè¡ã£ããïŒ
- ãªãŒãã³ APIïŒ MCP ãµãŒããŒã®ãšã³ããã€ã³ããå©çšããŠãç¬èªã® GIS ã¯ã©ã€ã¢ã³ããããã·ã¥ããŒãããŸãã¯ã¢ãã€ã«ã¢ããªãæ§ç¯ã§ããŸã
ð ã»ãã¥ãªãã£ãšãã©ã€ãã·ãŒ
- æç€ºçãªååã«åºã¥ãåæãšå¿ååãªãã«ãæ©å¯ããŒã¿ãå ±æãŸãã¯å ¬éãããããšã¯ãããŸãã
- åããŒãã¯ãµã³ãããã¯ã¹åãããŠããããã§ãã¬ãŒã·ã§ã³ã¯åžžã«ãªããã€ã³æ¹åŒã§ãç£æ»å¯èœã§ã
ð ãã§ãã¬ãŒã·ã§ã³ãšã³ã³ã¹ãã¬ãŒã·ã§ã³
- Konstellation 察å¿ïŒ ãã®ãµãŒããŒã¯ãã§ãã¬ãŒã·ã§ã³ãåæã«èšèšãããŠãããå°åã®ã¬ããã³ã¹ãšãã©ã€ãã·ãŒãå®å šã«ç¶æããªãããä»ã®ã³ãã¥ããã£ãéœåžãå°åãšç¥èŠãå ¬éã»å ±æã§ããŸã
- ãã§ãã¬ãŒã·ã§ã³ã¯ãšãªïŒ æ¯èŒãå¯èœã«ããŸãïŒäŸïŒããã¹ãŠã®è¿é£å°åã®ç«ã¡éãçã衚瀺ãããïŒ
ð ããã¥ã¡ã³ããšã³ãã¥ããã£
- å®å
šãªããã¥ã¡ã³ãã¯
/docs/ãŸã㯠civicnet.org/docs ãžã®ãªã³ã¯ ã«ãããŸã - ãµããŒãããã£ã¹ã«ãã·ã§ã³ã«ã€ããŠã¯ãDiscord ã® #mcp-server ãã£ã³ãã«ã«åå ããŠãã ãã
ð ã©ã€ã»ã³ã¹
AGPL 2.0 â ãªãŒãã³ã§ãåæ§æå¯èœãã³ãã¥ããã£äž»å°ã§ã
詳现㯠LICENSE ãåç
§ããŠãã ãã
âš åžæ°ã€ã³ãã©ã®æªæ¥ã®æ§ç¯ãå§ããŸãããïŒ
ð Swagger/OpenAPI ã®ã»ããã¢ããïŒAPI ãšã³ããã€ã³ãã®æŠèŠïŒ
/src/api/routes.ts ã«ä»¥äžã远å ããŸãïŒãµã³ãã«ïŒïŒ
import express from 'express'; import swaggerUi from 'swagger-ui-express'; import YAML from 'yamljs';
const router = express.Router(); const swaggerDocument = YAML.load('./config/swagger.yaml');
router.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument)); export default router;
swagger.yaml ã®ã¹ã¿ãŒã¿ãŒãµã³ãã«ïŒ
openapi: 3.0.0 info: title: MCP ãµãŒã㌠API version: 1.0.0 paths: /api/analyze: post: summary: ãšãŒãžã§ã³ãåããžãã¯ã䜿çšããŠåžæ°åãã¯ãšãªãåæãã requestBody: required: true content: application/json: schema: type: object properties: query: type: string context: type: object responses: '200': description: åæãå®äºããŸãã
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã