# ðïž AgentGIS Cloud Platform â Agent éæå±æ¶æè§åäžè¿ä»£è·¯çº¿
> **çŒå¶**: Huawei | **æ¥æ**: 2026-07-21
> **åºäº**: CARTO for Agents æ¶æç ç©¶ + AgentGIS å¹³å°ç°ç¶
> **å®äœ**: å¹³å°äžäžé¶æ®µæ¶æå级çå³çåè
---
## ç®åœ
1. [ç°ç¶å¿«ç
§](#äžç°ç¶å¿«ç
§)
2. [ç®æ æ¶æèåŸ](#äºç®æ æ¶æèåŸ)
3. [å·®è·åæ](#äžå·®è·åæ)
4. [è¿ä»£è·¯çº¿](#åè¿ä»£è·¯çº¿)
5. [Phase 1 诊讟ïŒSkill ç®åœ + CLI æ©å±](#äºphase-1-诊讟skill-ç®åœ--cli-æ©å±)
6. [Phase 2 诊讟ïŒMCP Server](#å
phase-2-诊讟mcp-server)
7. [Phase 3 诊讟ïŒSuite as Tool](#äžphase-3-诊讟suite-as-tool)
8. [Phase 4 屿ïŒè¯ä¹æš¡åäž Agent èªåšå](#å
«phase-4-屿è¯ä¹æš¡åäž-agent-èªåšå)
9. [éåœ](#ä¹éåœ)
---
## äžãç°ç¶å¿«ç
§
### 1.1 æä»¬æä»ä¹
```
çšæ· / AI Agent
â
âââ mk_ API Key â suites.mercator.cn REST API â åœåäž»èŠ Agent æ¥å
¥æ¹åŒ
â
âââ agc CLIïŒä»
run + config ååœä»€ïŒ
â
âââ agc run
--suite-id --input k=v
âââ agc config set/get/list
âââ agc config set api-key
```
**平尿 žå¿ïŒ**
| ç»ä»¶ | ç¶æ | 诎æ |
|------|------|------|
| `auth-center` | â
è¿è¡äž | è®€è¯ + API Key + OIDC + OAuth2/OIDC æå¡ç«¯ |
| `suite-market` | â
è¿è¡äž | å¥ä»¶ CRUDãååžãåè§æ£æµãæçŽ¢ |
| `discussions` | â
è¿è¡äž | 瀟åºè®šè®ºãæ
éèªåšæ¥å |
| `gis-actions` (`agc`) | â
è¿è¡äž | CLI æ¬å°æ§è¡åšïŒåœååªæ `run` å `config` |
| `Agent Profiles` | â
è¿è¡äž | SuiteHub/agent-profiles ä»åºïŒå€è§è²è®€ç¥æä»¶ |
| åè§æ£æµ | â
æ | `POST /api/v1/compliance/check` |
| åæ°æ ¡éª | â
æ | `POST /api/v1/parameters/validate` |
### 1.2 æä»¬çŒºä»ä¹
| èœå | ç¶æ | å·®è· |
|------|------|------|
| **CLI å
šå¹³å°èŠç** | â ä»
`run` + `config` | æ æçŽ¢ãæ è®€è¯ç®¡çãæ æ°æ®æäœãæ æ¥çå¥åº·ç¶æ |
| **CLI JSON èŸåº** | â | åœåèŸåºæ¯èªç±ææ¬ïŒAgent æ æ³å¯é è§£æ |
| **Agent Skill ç®åœ** | â æ | Agent Profiles æ¯éæè®€ç¥æä»¶ïŒäžæ¯å¯å 蜜ç playbook |
| **MCP Server** | â æ | Agent æ¥å
¥é¢çªïŒåªæ REST API |
| **Workflow as Tool** | â æ | å¥ä»¶ = æµçšïŒäœäžå¯è¢« Agent çŽæ¥è°çš |
| **è¯ä¹æš¡å** | â æ | Agent äžçè§£æ°æ®å«ä¹ïŒäŸèµäººå¡«åæ° |
| **Agent 审计远螪** | â æ | æ æ³è¿œèžª"åªäžª Agent åäºä»ä¹æäœ" |
---
## äºãç®æ æ¶æèåŸ
### 2.1 äž€å±æ¶æ â å屿¶æ
```
åœåïŒäž€å±ïŒ ç®æ ïŒåå±ïŒ
Agent ââRESTâââ suite-market Agent ââMCPâââ MCP Server
â
CLI âââ Platform ToolsïŒå
眮ïŒ
â âââ Interactive ToolsïŒæªæ¥ïŒ
â âââ Suite ToolsïŒåšææ³šåïŒ
agc âââ æ¬å°æ§è¡
Agent Skill ç®åœ
â
Utility â Platform â Use-case
â
agc CLIïŒæ©å±ïŒ
â
suite-market REST APIïŒäžåïŒ
```
### 2.2 ç®æ æ¶ææ»åŸ
```
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Agent éæå±ïŒæ°å»º/æ©å±ïŒ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â âââââââââââââââââââââââââââââââââââââââââââ ââââââââââââââââââââââââââ â
â â MCP ServerïŒæ°å»ºïŒ â â Agent SkillsïŒæ°å»ºïŒ â â
â â agentgis-mcp-server:8100 â â â â
â â â â Use-case Tier â â
â â Platform ToolsïŒå
眮ïŒïŒ â â ââ åŽæ åæ â â
â â ââ list_suites â â ââ POI å å â â
â â ââ inspect_suite â â ââ çç¹åæ â â
â â ââ run_suite â â ââ æ°æ®èŽšéæ¥å â â
â â ââ run_suite_async â â ââ arcgis-è¿ç§»ïŒè¿æïŒ â â
â â ââ get_run_status â â â äŸèµ â â
â â ââ get_run_results â â Platform Tier â â
â â ââ check_compliance â â ââ å¥ä»¶æçŽ¢äžè¿è¡ â â
â â ââ search_data â â ââ åè§æ£æµæµçš â â
â â ââ get_org_stats â â ââ æ°æ®å¯Œå
¥å¯Œåº â â
â â â â ââ å¹³å°å¥åº·æ£æ¥ â â
â â Suite ToolsïŒåšææ³šåïŒïŒ â â â äŸèµ â â
â â æ¯äžªæ 记䞺 mcp_enabled=True çå¥ä»¶ â â Utility Tier â â
â â èªåšæ³šå䞺äžäžª tool â â ââ å®è£
äžè®€è¯ â â
â â â â ââ agc åºç¡åœä»€ â â
â â 讀è¯ïŒAPI Key / OAuthïŒæªæ¥ïŒ â â ââ Docker æ§è¡æš¡å â â
â âââââââââââââââââââââââââââââââââââââââââââ â ââ Gitea å
äžèœœ â â
â ââââââââââââââââââââââââââ â
â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â agc CLIïŒæ©å±ïŒ 人类 + Agent éçš â â
â â agc auth login|token|logout â â
â â agc suite search|inspect|run|list-status â â
â â agc data import|export|list â â
â â agc compliance check â â
â â agc org stats â â
â â agc mcp start|stop|status â æ°å¢ïŒMCP æ¬å°ä»£ç â â
â ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ â
â â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âŒ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 平尿å¡å±ïŒç°æïŒå°å¹
ä¿®æ¹ïŒ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â suite-marketïŒ+ mcp_enabled åæ®µ + 审计 APIïŒ â
â auth-centerïŒ+ M2M OAuth æ¯æïŒè¿æïŒ â
â discussionsïŒ+ Agent æäœå®¡è®¡è¯é¢ïŒ â
â â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âŒ
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â æ¬å°æ§è¡å±ïŒäžåïŒ â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â agc run â äžèœœ â è§£å â ææåºæ§è¡ â ç»æä¿çæ¬å° â
â â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
```
### 2.3 Agent äº€äºæµçšïŒç®æ æïŒ
```
åºæ¯ AïŒäººç±»åšç»ç«¯çš
çšæ· â agc suite search --keyword åŽæ â JSON ç»æ
åºæ¯ BïŒClaude Code éè¿ CLI æäœ
Claude Code â shell: agc suite search --keyword åŽæ --format json
â è§£æ JSON â å³å®è°çšåªäžªå¥ä»¶
â shell: agc suite run --suite-id geofence --input center=POINT(116 40)
åºæ¯ CïŒChatGPT éè¿ MCP æäœ
ChatGPT â MCP list_suites(keyword="åŽæ ")
â MCP run_suite(suite_id="geofence", inputs={"center": "POINT(116 40)"})
â MCP Server â è°çš suite-market API â è§Šå agc runïŒæ¬å°æè¿åæ§è¡æä»€ïŒ
åºæ¯ DïŒèªç Agent éè¿ Skill Playbook æäœ
Agent æ¶å°è¯·æ±ïŒ{"type": "geofence", "params": {...}}
â å¹é
trigger å
³é®è¯ â å 蜜 geofence-analysis skill
â æ skill steps æ§è¡ïŒagc suite search â agc suite run â agc suite list-status
```
---
## äžãå·®è·åæ
### 3.1 èœå对ç
§ç©éµ
| èœå | CARTO | AgentGIS ç°ç¶ | å·®è·ç级 | åèå®ç° |
|------|-------|--------------|---------|---------|
| **CLI å®è£
** | `npm install -g @carto/carto-cli` | `pip install gis-actions` | çæ | æ éæ¹åš |
| **CLI åœä»€èŠç** | 30+ ååœä»€ïŒauth/credentials/maps/workflows/import/export/orgïŒ | 2 ååœä»€ïŒrun/configïŒ | ðŽ äž¥é | [Phase 1](#äºphase-1-诊讟skill-ç®åœ--cli-æ©å±) |
| **CLI JSON èŸåº** | é»è®€ JSON | ææ¬æ ŒåŒïŒéè§£æ | ð¡ äžç | `--format json` å
šå±åæ° |
| **CLI 讀è¯éæ** | `carto auth login` OAuth 亀äºåŒ | `agc config set api-key` æåšé
| ð¡ äžç | `agc auth login` + OAuth 讟å€ç æµ |
| **Agent Skills** | äžå± 15+ skillïŒGitHub å
¬åŒä»åº | æ | ðŽ äž¥é | [Phase 1](#äºphase-1-诊讟skill-ç®åœ--cli-æ©å±) |
| **MCP Server** | æç®¡åŒïŒOAuth/Token è®€è¯ | æ | ðŽ äž¥é | [Phase 2](#å
phase-2-诊讟mcp-server) |
| **Workflow as Tool** | äžé® MCP publish | æ | ðŽ äž¥é | [Phase 3](#äžphase-3-诊讟suite-as-tool) |
| **å¹³å°å·¥å
·ïŒå
眮ïŒ** | list_connections, browse_tables, describe_table... | æ | ðŽ äž¥é | Phase 2 å
眮 |
| **亀äºåŒå°åŸ** | view_mapïŒMCP Apps å
èæž²æïŒ | äžéèŠ | äžéçš | æ 计å |
| **è¯ä¹æš¡å** | Apache Ossie + CARTO ç©ºéŽæ©å± | æ | ð¡ äžç | Phase 4 |
| **Agent 审计** | CARTO AI Analytics 颿¿ | æ | ð¡ äžç | Phase 3+ |
| **è¿ç§»å·¥å
·** | carto-arcgis-migration | æ | ð¢ äœ | æé |
| **In-product Agent** | Builder å
åµè倩 | æäžèè | äžéçš | æé€ |
### 3.2 ææ¯åºè¯äŒ°
| é¡¹ç® | 圱å | 建议 |
|------|------|------|
| `agc` æ ç»äžèŸåºæ ŒåŒ | Agent æ æ³å¯é è§£æ | å å
šå± `--format json|text` |
| suite-market æ MCP çžå
³ API | æ æ³æ³šååæ¥è¯¢ mcp_enabled å¥ä»¶ | å端å åæ®µ + API |
| æ Agent æäœå®¡è®¡ | æ æ³è¿œèžªè°åäºä»ä¹ | PostgreSQL + Redis åå®¡è®¡æµ |
| æ é犻ç MCP Server å®¹åš | éèŠæ°å®¹åš | Docker + NPM å代 |
| Agent Profiles æ¯éææä»¶ | äžèœçšåºåå 蜜 | ç¬ç«åº skills ç®åœç»æ |
---
## åãè¿ä»£è·¯çº¿
### æ»è§
```
Phase 1 Phase 2 Phase 3 Phase 4
2026-07-21 2026-08-01 2026-09-01 2026-Q4
âââââââââ âââââââââ âââââââââ ââââââââ
ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ
â Skill ç®åœ â â MCP Server â â Suite as Tool â â è¯ä¹æš¡å â
â CLI æ©å± â âââ⺠â (åºç¡ç) â âââ⺠â (åšææ³šå) â âââ⺠â Agent èªå³ â
â 审计åç¹ â â Claude å¯¹æ¥ â â AI Analytics â â ç + äŒå â
ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ ââââââââââââââââ
â
2-3 åš 3-4 åš 3-4 åš è¿ææç»
```
### Phase 1ïŒå°åºïŒ2026-07-21 èµ·ïŒé¢è®¡ 2-3 åšïŒ
**ç®æ ïŒè®© AI çŒç Agent èœæ£ç¡®æäœ AgentGIS å¹³å°**
| å·¥äœé¡¹ | 亀ä»ç© | èŽèŽ£äºº |
|--------|--------|--------|
| **1a. 讟计 Skill ç®åœç»æ** | `agent-skills/` ç®åœ + ä»åº | HuaweiïŒåŒ IssueïŒ |
| **1b. çŒå Utility SkillïŒ3 䞪ïŒ** | install-auth.md, basic-commands.md, execution-model.md | HuaweiïŒåŒ IssueïŒ |
| **1c. çŒå Platform SkillïŒ2 䞪ïŒ** | suite-search-run.md, compliance-check.md | HuaweiïŒåŒ IssueïŒ |
| **1d. çŒå Use-case SkillïŒ1 䞪ïŒ** | geofence-analysis.md | HuaweiïŒåŒ IssueïŒ |
| **1e. æ©å± `agc` CLI** | æ·»å auth/search/list-status/stats ååœä»€ + `--format json` | AdminïŒçŒç ïŒ |
| **1f. 审计åç¹** | `suite-market` å端添å `agent_action` 审计衚 | AdminïŒçŒç ïŒ |
**éªæ¶æ åïŒ**
- â
Claude Code éè¿ skill åŒå¯ŒïŒèœçš `agc` CLI 宿"æçŽ¢å¥ä»¶âæ¥ç诊æ
âè¿è¡"
- â
`agc suite search --format json` è¿åå¯è§£æ JSON
- â
ææ Agent æäœåå
¥å®¡è®¡æ¥å¿
### Phase 2ïŒæ ååè®®æ¥å
¥ïŒ2026-08-01 èµ·ïŒé¢è®¡ 3-4 åšïŒ
**ç®æ ïŒè®©ä»»æ MCP å
Œå®¹ç AI 客æ·ç«¯èœçŽæ¥è°çš AgentGIS å¹³å°**
| å·¥äœé¡¹ | 亀ä»ç© | èŽèŽ£äºº |
|--------|--------|--------|
| **2a. æå»º MCP Server 容åš** | Docker éå + NPM å代 (mcp.mercator.cn) | HuaweiïŒè¿ç»ŽïŒ |
| **2b. å®ç°æ žå¿ Platform Tools** | list_suites, inspect_suite, run_suite, run_suite_async, get_run_status, get_run_results, check_compliance | AdminïŒçŒç ïŒ |
| **2c. API Key 讀è¯éæ** | MCP Server éªè¯ `mk_` åçŒ API Key | AdminïŒçŒç ïŒ |
| **2d. å¯¹æ¥ Claude Desktop æµè¯** | é
眮 MCP Server URLïŒç«¯å°ç«¯éªè¯ | HuaweiïŒæµè¯ïŒ |
| **2e. å¯¹æ¥ ChatGPT æµè¯** | ChatGPT èªå®ä¹ MCP æµè¯ | HuaweiïŒæµè¯ïŒ |
| **2f. çŒå MCP äœ¿çšææ¡£** | åŒåè
æå + çšæ·æå | HuaweiïŒææ¡£ïŒ |
**éªæ¶æ åïŒ**
- â
ChatGPT çŽæ¥èå€©ïŒæçŽ¢å¥ä»¶âæ¥ç诊æ
âè¿è¡âæ¥ç¶æâè·åç»æ
- â
Claude Desktop åæ ·å¯çš
- â
è®€è¯æ£ç¡®ïŒéæ³ API Key 被æç»
- â
`mcp.mercator.cn` çš³å®è¿è¡
### Phase 3ïŒåšæå¥ä»¶å·¥å
·ïŒ2026-09-01 èµ·ïŒé¢è®¡ 3-4 åšïŒ
**ç®æ ïŒç»åè§æ£æµçå¥ä»¶èªåšåäžºå¯ MCP è°çšçå·¥å
·**
| å·¥äœé¡¹ | 亀ä»ç© | èŽèŽ£äºº |
|--------|--------|--------|
| **3a. suite-market å¢å mcp_enabled åæ®µ** | æš¡åè¿ç§» + API æŽæ° + å端 UI | AdminïŒçŒç ïŒ |
| **3b. åè§éè¿åèªåšæ è®°** | åè§æ£æµæµçšæ«å°Ÿå¢å èªåšæ è®°é»èŸ | AdminïŒçŒç ïŒ |
| **3c. MCP Server åšææ³šå** | MCP Server 读åå¯è°çšå¥ä»¶å衚ïŒèªåšæ³šå
¥ tools | AdminïŒçŒç ïŒ |
| **3d. åŒæ¥æ§è¡æ¯æåŒºå** | æ§è¡ç¶æåè° / 蜮询 + è¶
æ¶æºå¶ | AdminïŒçŒç ïŒ |
| **3e. AI Analytics 颿¿** | å®¡è®¡æ°æ® â å¯è§å颿¿ïŒæäœæè¡ãæå/倱莥çïŒ | AdminïŒçŒç ïŒ |
| **3f. å®å Use-case Skill ç®åœ** | åå 3 䞪 Use-case skill | HuaweiïŒææ¡£ïŒ |
**éªæ¶æ åïŒ**
- â
ååžäžäžªåè§å¥ä»¶ â èªåšåš MCP Server äžåºç°äžºå¯è°çš tool
- â
Agent çŽæ¥è° `run_geofence_analysis(inputs={...})` â æ§è¡ â è¿åç»æ
- â
管çåçå° Agent æäœç»è®¡é¢æ¿
- â
Skill ç®åœèŸŸå° 5+ 䞪 Use-case skill
### Phase 4ïŒæºèœ Agent å±ïŒ2026-Q4ïŒè¿æïŒ
**ç®æ ïŒAgent èœçè§£æ°æ®å«ä¹ïŒèªåšéæ©å¹¶å¡«å
åæ°æ§è¡å¥ä»¶**
| å·¥äœé¡¹ | 诎æ |
|--------|------|
| 4a. **è¯ä¹æš¡å讟计** | åºäº Apache Ossie æ åïŒå®ä¹æ°æ®éãåæ®µãå
³ç³»ãææ |
| 4b. **è¯ä¹æš¡åååš** | suite-market æ©å±ïŒæ¯æå¥ä»¶å
³èè¯ä¹æš¡å |
| 4c. **Agent èªå³ç** | Agent æ ¹æ®çšæ·èªç¶è¯èšæè¿° + è¯ä¹æš¡åïŒèªåšå¹é
å¥ä»¶å¹¶å¡«å
åæ° |
| 4d. **M2M OAuth** | 䞺埮æå¡åèªåšå Agent æäŸæºåšéŽè®€è¯ |
| 4e. **è¿ç§»å·¥å
·ïŒæéïŒ** | åŠåºç°è¿ç§»éæ±ïŒå®ç° agentgis-arcgis-migration skill |
---
## äºãPhase 1 诊讟ïŒSkill ç®åœ + CLI æ©å±
### 5.1 Skill ç®åœç»æ
**ä»åºäœçœ®ïŒ** `SuiteHub/agent-profiles`ïŒå·²æä»åºïŒæ°å¢ `agent-skills/` ç®åœïŒ
```
SuiteHub/agent-profiles/agent-skills/
â
âââ catalog.json â æèœæž
åïŒäŸ Agent çšåºåå 蜜ïŒ
âââ ARCHITECTURE.md â æ¶æè¯Žæ + å 蜜è§å
â
âââ utility/
â âââ install-and-auth.md â å®è£
agc + é
眮 API Key
â âââ basic-commands.md â agc åºç¡åœä»€åè
â âââ execution-model.md â Docker é犻æ§è¡æš¡å诎æ
â âââ gitea-packages.md â Gitea Packages äžèœœæš¡åŒ
â
âââ platform/
â âââ suite-search-and-run.md â æçŽ¢å¥ä»¶ + æ¥ç诊æ
+ è¿è¡
â âââ compliance-check.md â åè§æ£æµæµçš
â âââ data-import-export.md â æ°æ®å¯Œå
¥å¯ŒåºïŒé
å CLIïŒ
â âââ platform-health.md â å¹³å°å¥åº·æ£æ¥
â
âââ use-case/
âââ geofence-analysis.md â å°çåŽæ åæ
âââ poi-overlay-analysis.md â POI å å åæïŒPhase 3+ïŒ
âââ spatial-statistics.md â 空éŽç»è®¡ïŒPhase 3+ïŒ
âââ data-quality-report.md â æ°æ®èŽšéæ¥åïŒPhase 3+ïŒ
```
### 5.2 Skill æä»¶æš¡æ¿
æ¯äžª `.md` æä»¶éµåŸªç»äžæ ŒåŒïŒAgent å¯çšåºåè§£æïŒ
```markdown
# Skill: <åç§°>
> å±çº§: utility | platform | use-case
> è§Šåè¯: keyword1, keyword2, keyword3
> äŸèµ: [utility/install-and-auth, ...]
## éçšåºæ¯
ïŒçšèªç¶è¯èšæè¿°ä»ä¹æ
åµäž Agent åºè¯¥å 蜜è¿äžª skillïŒ
## å眮æ¡ä»¶
ïŒéèŠåšå 蜜è¿äžª skill ä¹åå·²æ»¡è¶³çæ¡ä»¶ïŒ
## æ¥éª€
### æ¥éª€ 1ïŒxxxx
```bash
agc --format json
```
èŸåºç€ºäŸïŒ
```json
{...}
```
è§£ææåŒïŒAgent åºè¯¥å
³æ³šåªäžªå段ãåŠäœå€æäžäžæ¥...
### æ¥éª€ 2ïŒxxxx
...
## 宿Žç€ºäŸ
äžäžªç«¯å°ç«¯çå¯¹è¯æèæ¬ç€ºäŸ
## åžžè§é误
ïŒAgent å¯èœéå°çé误åå€çæ¹æ³ïŒ
```
### 5.3 Skill å 蜜è§åïŒ`catalog.json`ïŒ
```json
{
"version": "1.0",
"skills": [
{
"id": "install-and-auth",
"tier": "utility",
"triggers": ["install", "setup", "auth", "api key", "login"],
"dependencies": [],
"file": "utility/install-and-auth.md"
},
{
"id": "basic-commands",
"tier": "utility",
"triggers": ["agc", "cli", "command"],
"dependencies": ["install-and-auth"],
"file": "utility/basic-commands.md"
},
{
"id": "suite-search-and-run",
"tier": "platform",
"triggers": ["search suite", "run suite", "execute", "find suite"],
"dependencies": ["install-and-auth", "basic-commands"],
"file": "platform/suite-search-and-run.md"
},
{
"id": "geofence-analysis",
"tier": "use-case",
"triggers": ["geofence", "fence", "buffer", "åŽæ ", "çŒå²åº"],
"dependencies": ["suite-search-and-run", "execution-model"],
"file": "use-case/geofence-analysis.md"
}
]
}
```
**Agent å 蜜é»èŸïŒ**
1. è§£æçšæ·è¯·æ± â æåå
³é®è¯
2. å¹é
`catalog.json` äž skills[].triggers â æ¶éå¹é
ç skill ID
3. å»éãæ tier æåºïŒutility â platform â use-caseïŒ
4. éåœå 蜜 dependencies
5. æå 蜜顺åºè¯»åææ `.md` æä»¶æ³šå
¥ Agent äžäžæ
### 5.4 `agc` CLI æ©å±è®Ÿè®¡
**æ°å¢ååœä»€ïŒ**
```
agc
âââ auth
â âââ login # OAuth 讟å€ç æµïŒè¿æïŒ
â âââ token set # åœå config set api-key çæ¹ç
â âââ token show # æŸç€ºåœå API KeyïŒæ©ç ïŒ
â âââ token test # æµè¯ API Key æææ§
â
âââ suite
â âââ search # æçŽ¢å¥ä»¶ïŒå°è£
GET /api/v1/suites/searchïŒ
â âââ inspect # æ¥çå¥ä»¶è¯Šæ
â âââ run --input k=v # åœå run ç粟ç®ç
â âââ list-status # æ¥çå岿§è¡ç¶æïŒæ°å¢åèœïŒ
â
âââ data
â âââ list # ååºå·²è¿æ¥çæ°æ®æºïŒè¿æïŒ
â âââ import # 富å
¥æ°æ®ïŒè¿æïŒ
â âââ export # 富åºç»æïŒè¿æïŒ
â
âââ compliance
â âââ check # è§Šååè§æ£æµ
â
âââ org
â âââ stats # ç»ç»ç»è®¡
â
âââ mcp
â âââ start # å¯åšæ¬å° MCP 代çïŒè¿æïŒ
â âââ status # æ¥ç MCP è¿æ¥ç¶æ
â
âââ config (ç°æ)
âââ set
âââ get
âââ list
```
**å
šå±æ å¿ïŒ**
- `--format json|text` â æ§å¶èŸåºæ ŒåŒãé»è®€ `text`ïŒäººç±»å奜ïŒïŒ`json`ïŒAgent å奜ïŒ
- `--quiet` â åªèŸåºç»ææ°æ®ïŒæ banner/æç€ºä¿¡æ¯
- `--timeout ` â æ§è¡è¶
æ¶
**JSON èŸåºæ ŒåŒçºŠå®ïŒ**
ææè¿å JSON çååœä»€éµåŸªç»äž schemaïŒ
```json
{
"status": "ok" | "error",
"data": { ... },
"error": { "code": "ERROR_CODE", "message": "Human readable" }
}
```
### 5.5 审计åç¹è®Ÿè®¡
**æ°è¡š `agent_action_log`ïŒ`suite_market_db`ïŒïŒ**
```sql
CREATE TABLE agent_action_log (
id BIGSERIAL PRIMARY KEY,
api_key_id VARCHAR(64) NOT NULL, -- åªäžª API Key æ§è¡çæäœ
agent_name VARCHAR(128) DEFAULT '', -- Agent æ è¯ïŒåŠ "claude-code"ïŒ
action VARCHAR(64) NOT NULL, -- æäœç±»å
target_type VARCHAR(32), -- æäœå¯¹è±¡ç±»åïŒsuite/data/...ïŒ
target_id VARCHAR(128), -- æäœå¯¹è±¡ ID
request JSONB, -- 请æ±åæ°
response_summary VARCHAR(256), -- ååºæèŠ
status VARCHAR(16) DEFAULT 'success', -- success/failure
duration_ms INTEGER, -- èæ¶
ip_address INET,
created_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_agent_action_log_api_key ON agent_action_log(api_key_id);
CREATE INDEX idx_agent_action_log_created ON agent_action_log(created_at);
```
**ééç¹ïŒ**
- ææ REST API å
¥å£ïŒéè¿ FastAPI middlewareïŒ
- `agc` CLI ææååœä»€ïŒéè¿è¯·æ±å€Ž `X-Agent-Name`ïŒ
- æªæ¥ MCP Server ææè°çš
---
## å
ãPhase 2 诊讟ïŒMCP Server
### 6.1 æ¶æ
```
Claude.ai / ChatGPT / èªç Agent
â
â MCP Protocol (SSE / Streamable HTTP)
âŒ
ââââââââââââââââââââââââââââââââââââââââ
â agentgis-mcp-server:8100 â
â â
â Python (FastAPI) + mcp-python-sdk â
â â
â Auth Middleware: éªè¯ mk_ API Key â
â â
â ââââââââââââââââââââââââââââââââââ â
â â Tool Registry â â
â â âââ Built-in Tools (éæ) â â
â â â âââ list_suites â â
â â â âââ inspect_suite â â
â â â âââ run_suite â â
â â â âââ run_suite_async â â
â â â âââ get_run_status â â
â â â âââ get_run_results â â
â â â âââ check_compliance â â
â â â âââ search_data â â
â â â âââ get_org_stats â â
â â âââ Suite Tools (åšæ) â â
â â âââ Phase 3 å¯çš â â
â ââââââââââââââââââââââââââââââââââ â
â â
â Backend Calls: â
â âââ suites.mercator.cn REST API â
â âââ auth.mercator.cn éªè¯ API Key â
ââââââââââââââââââââââââââââââââââââââââ
â
âŒ
Nginx Proxy Manager
mcp.mercator.cn â agentgis-mcp-server:8100
```
### 6.2 æ žå¿ Tool å®ä¹
æ¯äžª tool çš JSON Schema å®ä¹åæ°åè¿åïŒ
#### `list_suites`
```json
{
"name": "list_suites",
"description": "æçŽ¢å¯çšå¥ä»¶ãä»å
³é®è¯æçŽ¢ææåç±»æµè§ææå·²ååžå¥ä»¶ã",
"inputSchema": {
"type": "object",
"properties": {
"keyword": { "type": "string", "description": "æçŽ¢å
³é®è¯ïŒæ¯ææš¡ç³å¹é
" },
"category": { "type": "string", "description": "åç±»è¿æ»€" },
"page": { "type": "integer", "description": "页ç ïŒé»è®€ 1" },
"page_size": { "type": "integer", "description": "æ¯é¡µæ°éïŒé»è®€ 10" }
}
}
}
```
#### `inspect_suite`
```json
{
"name": "inspect_suite",
"description": "æ¥çå¥ä»¶ç诊ç»ä¿¡æ¯ïŒå
æ¬åæ°è¯Žæãçæ¬åå²ã䜿çšè¯ŽæãAgent åšå³å®è¿è¡ååºè¯¥å
inspectã",
"inputSchema": {
"type": "object",
"properties": {
"suite_id": { "type": "string", "description": "å¥ä»¶ ID" },
"version": { "type": "string", "description": "å¯éïŒæå®çæ¬" }
},
"required": ["suite_id"]
}
}
```
#### `run_suite`
```json
{
"name": "run_suite",
"description": "è¿è¡å¥ä»¶ãåæ°å¿
é¡»å¹é
inspect_suite è¿åç parameter_schemaã忥æ§è¡ïŒçåŸ
ç»æè¿åã",
"inputSchema": {
"type": "object",
"properties": {
"suite_id": { "type": "string", "description": "å¥ä»¶ ID" },
"version": { "type": "string", "description": "å¯éïŒæå®çæ¬" },
"inputs": {
"type": "object",
"description": "åæ°é®åŒå¯¹ïŒæ ŒåŒç±å¥ä»¶ç parameter_schema å®ä¹",
"additionalProperties": { "type": "string" }
}
},
"required": ["suite_id", "inputs"]
}
}
```
#### `run_suite_async`
äž `run_suite` çžååæ°ïŒäœç«å³è¿å `run_id`ïŒAgent çš `get_run_status` / `get_run_results` 蜮询ã
#### `check_compliance`
```json
{
"name": "check_compliance",
"description": "对å¥ä»¶çèæ¬å
容觊ååè§æ£æµãè¿ååè§è¯ååæ£æµæ¥åã",
"inputSchema": {
"type": "object",
"properties": {
"suite_id": { "type": "string", "description": "å¥ä»¶ ID" },
"version": { "type": "string", "description": "å¯éïŒæå®çæ¬" }
},
"required": ["suite_id"]
}
}
```
### 6.3 讀è¯å®ç°
```
Client Request Header:
Authorization: Bearer mk_8e8oJPtslcrwWMdbveIYF6JTj2DdVWmip1YuXDywQsY
MCP Server:
1. æå Bearer Token
2. è° auth.mercator.cn/api/v1/apikeys/verify
POST { "api_key": "mk_..." }
â { "valid": true, "user_id": "...", "scopes": ["suite:read", "suite:run"] }
3. çŒåéªè¯ç»æïŒ5 åé TTLïŒRedisïŒ
4. åš tool æ§è¡æ¶æ£æ¥ scope æ¯åŠå¹é
```
### 6.4 éšçœ²é
眮
```dockerfile
# Dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY src/ ./src/
ENV PYTHONPATH=/app/src
EXPOSE 8100
CMD ["uvicorn", "src.main:app", "--host", "0.0.0.0", "--port", "8100"]
```
```yaml
# docker-compose æ°å¢æå¡
agentgis-mcp-server:
build: ./agentgis-mcp-server
container_name: agentgis-mcp-server
networks:
- mercator-net
environment:
- SUITE_MARKET_URL=http://suite-market-backend:8001
- AUTH_CENTER_URL=http://auth-center-backend:8000
- REDIS_URL=redis://mercator-redis:6379/1
- MCP_SERVER_PORT=8100
- LOG_LEVEL=info
restart: unless-stopped
```
```
NPM é
眮ïŒ
Domain: mcp.mercator.cn
Forward: http://agentgis-mcp-server:8100
SSL: Let's Encrypt
WebSocket Support: â
OnïŒMCP éèŠ SSEïŒ
```
### 6.5 æµè¯æž
å
| æµè¯é¡¹ | æ¹æ³ | 颿 |
|--------|------|------|
| API Key æ£ç¡® | curl -H "Authorization: Bearer mk_..." | è¿åæ£åžžç»æ |
| API Key é误 | curl -H "Authorization: Bearer mk_wrong" | 401 Unauthorized |
| API Key è¿æ | 䜿çšå·²è¿æ Key | 401 |
| æ API Key | curl æ Authorization | 401 |
| MCP Inspector è¿æ¥ | npm install -g @modelcontextprotocol/inspector | ååºç tools æ£ç¡® |
| Claude Desktop è¿æ¥ | claude_desktop_config.json é
眮 | å·¥å
·æ£åžžè°çš |
| run_suite 忥 | çå¥ä»¶ | çåŸ
宿åè¿åç»æ |
| run_suite_async | é¿å¥ä»¶ | ç«å³è¿å run_idïŒèœ®è¯¢è·åç»æ |
| å¹¶åè°çš | åæ¶ 5 äžªè¯·æ± | å请æ±ç¬ç«å€ç |
---
## äžãPhase 3 诊讟ïŒSuite as Tool
### 7.1 æ°æ®åºæš¡ååæŽ
`suite_suites` 衚æ°å¢å段ïŒ
```python
# suite_market æš¡å
class Suite(Base):
__tablename__ = "suite_suites"
# ç°æåæ®µ...
id: str
name: str
# ...
# Phase 3 æ°å¢
mcp_enabled: bool = False # æ¯åŠå¯äœäžº MCP Tool è°çš
mcp_tool_name: str | None = None # èªå®ä¹ tool åïŒé»è®€çš suite_id
mcp_description: str | None = None # èªå®ä¹ tool æè¿°ïŒé»è®€çš suite description
mcp_approved_at: datetime | None # æ¹åæ¶éŽ
mcp_approved_by: str | None # æ¹å人
mcp_call_count: int = 0 # 环计 MCP è°ç𿬡æ°
```
### 7.2 ååžæµçšåæŽ
```
åŒåè
æå
workflow.yaml + scripts/ â .tar.gz
â POST /publish/uploadïŒé API Key + Gitea TokenïŒ
â åè§æ£æµ
â åæ°æ ¡éª
â äžäŒ èæ¬å
å° Gitea Packages
â åå
¥ suite_suites
â [æ°å¢] åŠæåè§éè¿ â mcp_enabled = True
â [æ°å¢] MCP Server éæ°å 蜜 tool å衚
```
### 7.3 MCP Server åšææ³šåé»èŸ
```python
# mcp-server å¯åšæ¶ + 宿¶å·æ°ïŒæ¯ 5 åéïŒ
async def refresh_suite_tools():
"""ä» suite-market æåææ mcp_enabled=True çå¥ä»¶ïŒæ³šå䞺 tool"""
async with httpx.AsyncClient() as client:
resp = await client.get(
f"{SUITE_MARKET_URL}/api/v1/suites",
params={"mcp_enabled": True},
headers={"Authorization": f"Bearer {INTERNAL_TOKEN}"}
)
suites = resp.json()
# æž
空æ§ç suite tools
suite_tools.clear()
for suite in suites:
# çæ tool schema
tool_def = {
"name": suite.get("mcp_tool_name") or slugify(suite["id"]),
"description": suite.get("mcp_description") or suite.get("description", ""),
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
}
# ä» parameter_schema 蜬æ¢åæ°å®ä¹
for param in suite.get("parameter_schema", []):
tool_def["inputSchema"]["properties"][param["name"]] = {
"type": param.get("json_type", "string"),
"description": param.get("description", "")
}
if param.get("required"):
tool_def["inputSchema"]["required"].append(param["name"])
suite_tools[suite["id"]] = tool_def
```
### 7.4 AI Analytics 颿¿
**æ°æ®æºïŒ** `agent_action_log` 衚
**颿¿å
容ïŒå¯ä»¥çšç®å K/V å±ç€ºæéå GrafanaïŒïŒ**
| ææ | SQL |
|------|-----|
| 仿¥æŽ»è· Agent æ° | `SELECT COUNT(DISTINCT api_key_id) FROM agent_action_log WHERE created_at > today()` |
| æäœ Top 5 | `SELECT action, COUNT(*) FROM agent_action_log GROUP BY action ORDER BY 2 DESC LIMIT 5` |
| æå/倱莥ç | `SELECT status, COUNT(*) FROM agent_action_log GROUP BY status` |
| ææŽ»è·å¥ä»¶ Top 5 | `SELECT target_id, COUNT(*) FROM agent_action_log WHERE target_type='suite' GROUP BY target_id` |
| æäœè¶å¿ïŒæè¿ 7 å€©ïŒ | `SELECT DATE(created_at), COUNT(*) FROM agent_action_log WHERE created_at > 7days GROUP BY 1` |
**å端éæïŒ** suite-market å端 Settings â AI Analytics 页
---
## å
«ãPhase 4 屿ïŒè¯ä¹æš¡åäž Agent èªåšå
> è¿éšåæ¯è¿ææ¹åïŒååšè¿éäœäžºææ¯åšå€ïŒäžçº³å
¥è¿æè¿ä»£ã
### 8.1 è¯ä¹æš¡åéé
åºäº Apache Ossie æ©å±ç©ºéŽè¯ä¹ïŒ
```yaml
version: "0.1.1"
semantic_model:
- name: "åå°å©çšåæå¥ä»¶"
description: "åºäºé¥æåœ±åçåå°å©çšåç±»äžåæ"
datasets:
- name: "land_use_parcels"
fields:
- name: "geom"
description: "å°å蟹çïŒPolygon, EPSG:4326ïŒ"
custom_extensions:
- vendor_name: AgentGIS
data: '{"spatial_data": {"type": "polygon", "srid": 4326}}'
- name: "land_type"
description: "åå°å©çšç±»åçŒç "
- name: "area_sqkm"
description: "é¢ç§¯ïŒå¹³æ¹å
¬éïŒ"
metrics:
- name: "åç±»åå æ¯"
expression: "COUNT(*) * 1.0 / SUM(COUNT(*)) OVER()"
```
### 8.2 Agent èªå³çæµçš
```
çšæ·èŸå
¥ïŒ "åž®æåæå京äºç¯å
çåäžçšå°ååž"
â
âââ (Phase 4) Agent 读åè¯ä¹æš¡å â å¹é
å° land_use_parcels
âââ (Phase 4) Agent èªåšéæ©"åŽæ + åç±»ç»è®¡"å¥ä»¶ç»å
âââ (Phase 4) èªåšå¡«å
åæ°ïŒcenter=å京åžäžå¿, radius=äºç¯ååŸ
â
âââ (Phase 3) MCP Server â run_suite("geofence-analysis", inputs={...})
â
âââ (Phase 2) æ§è¡ â è¿åç»æ â Agent 解读èŸåº
```
---
## ä¹ãéåœ
### A. å·¥äœéäŒ°ç®æ±æ»
| Phase | å·¥äœé¡¹ | ç±»å | 䌰计人倩 | äŒå
|
|-------|--------|------|---------|------|
| P1 | Skill ç®åœç»ææå»º | ææ¡£ | 0.5 | ðŽ |
| P1 | Utility Skill à 3 | ææ¡£ | 1 | ðŽ |
| P1 | Platform Skill à 2 | ææ¡£ | 1 | ðŽ |
| P1 | Use-case Skill à 1 | ææ¡£ | 1 | ðŽ |
| P1 | CLI æ©å±ïŒauth/suite/search/statsïŒ | çŒç | 3 | ðŽ |
| P1 | CLI JSON èŸåºæ ŒåŒå | çŒç | 1 | ðŽ |
| P1 | 审计衚 + middleware | çŒç | 2 | ð¡ |
| **P1 å°è®¡** | | | **9.5** | |
| P2 | MCP Server å®¹åšæå»º + éšçœ² | è¿ç»Ž | 1 | ðŽ |
| P2 | 5 äžªæ žå¿ tool å®ç° | çŒç | 4 | ðŽ |
| P2 | API Key 讀è¯äžéŽä»¶ | çŒç | 1 | ðŽ |
| P2 | æµè¯å¯¹æ¥ + è°è¯ | æµè¯ | 2 | ðŽ |
| P2 | MCP äœ¿çšææ¡£ | ææ¡£ | 1 | ð¡ |
| **P2 å°è®¡** | | | **9** | |
| P3 | suite-market æš¡ååæŽ | çŒç | 1 | ðŽ |
| P3 | ååžæµçšä¿®æ¹ | çŒç | 2 | ðŽ |
| P3 | MCP åšææ³šå | çŒç | 2 | ðŽ |
| P3 | åŒæ¥æ§è¡å¢åŒº | çŒç | 2 | ð¡ |
| P3 | Analytics 颿¿å端 | çŒç | 3 | ð¡ |
| P3 | Use-case Skill à 3 | ææ¡£ | 2 | ð¡ |
| **P3 å°è®¡** | | | **12** | |
**æ»è®¡ïŒçºŠ 30 人倩**ïŒå 3 äžªé¶æ®µæ§è¡ïŒ
### B. Issue å建暡æ¿
Boss æ¹ååïŒæä»¥äžæš¡æ¿åŒ IssueïŒ
```markdown
## æ é¢
[Agentéæ] Phase X: <å·¥äœé¡¹åç§°>
## èæ¯
ïŒäžºä»ä¹åãåèäº CARTO for Agents çä»ä¹è®Ÿè®¡ïŒ
## éæ±æè¿°
ïŒå
·äœåä»ä¹ïŒéªæ¶æ¡ä»¶ïŒ
## ææ¯åè
- æ¶æææ¡£: research/carto-for-agents-architecture-notes.md
- çžå
³ API: ïŒåŠæïŒ
- éèŠä¿®æ¹çä»åº: suite-market / gis-actions / agent-profiles
## éªæ¶æ¡ä»¶
- [ ] æ¡ä»¶ 1
- [ ] æ¡ä»¶ 2
## ææŽŸ
@Admin
```
### C. å³çè®°åœ
| å³ç | éæ© | çç± |
|------|------|------|
| MCP åè®®çæ¬ | 2025-06-18ïŒææ°çš³å®çïŒ | 客æ·ç«¯æ¯ææå¹¿ |
| MCP Server è¯èš | Python (FastAPI) | äžç°æææ¯æ äžèŽïŒmcp-python-sdk æç |
| MCP äŒ èŸæ¹åŒ | SSEïŒServer-Sent EventsïŒ | å
Œå®¹æ§æå¥œïŒNPM æ¯æ WebSocket |
| Agent Skill æ ŒåŒ | Markdown + JSON catalog | 人类å¯è¯»ïŒAgent å¯è§£æïŒæ éæ°å·¥å
· |
| CLI JSON èŸåº | å
šå± --format åæ° | äžåœ±åç°æ text èŸåºå
Œå®¹æ§ |
| 审计ååš | PostgreSQLïŒsuite_market_dbïŒ | äžç°ææ°æ®åºäžèŽïŒé¿å
åŒå
¥æ°ååš |
| 容åšçœç» | å å
¥ç°æ mercator-net | ç»äžçœç»ç®¡ç |
---
*ææ¡£çæ¬: v1.0*
*äžæ¬¡è¯å®¡: Phase 1 宿å*