Appcircle MCP Server
ทางการเซิร์ฟเวอร์ MCP อย่างเป็นทางการของ Appcircle
คุณทำอะไรได้บ้างด้วย Appcircle MCP?
- รายการและค้นหาโปรไฟล์การสร้าง — ดึงข้อมูลโปรไฟล์การสร้างแบบแบ่งหน้าและกรองตามชื่อด้วย
get_build_profiles - ตรวจสอบการกำหนดค่าการสร้างและเวิร์กโฟลว์ — ดึงรายละเอียดสำหรับโปรไฟล์การสร้างที่ระบุ การกำหนดค่า และเวิร์กโฟลว์โดยใช้
get_build_profile_details,get_build_configuration_detailsและget_workflow_detail - ตรวจสอบข้อมูลประจำตัวสำหรับการลงนาม — แสดงรายการใบรับรอง คีย์สโตร์ โปรไฟล์การจัดเตรียม และตัวระบุบันเดิลผ่าน
get_certificates,get_keystores,get_provisioning_profilesและget_bundle_identifiers - ตรวจสอบสถานะการทดสอบและการเผยแพร่ในองค์กร — รับโปรไฟล์การเผยแพร่และเวอร์ชันแอปของโปรไฟล์เหล่านั้นด้วย
get_distribution_profilesและget_distribution_profile_detailsหรือตรวจสอบโปรไฟล์ร้านค้าองค์กรผ่านget_store_profiles - สร้างรายงานสถานะ CI/CD และประวัติการสร้าง — ใช้
get_build_insights_reportสำหรับแนวโน้มรวมและการวิเคราะห์สาเหตุที่แท้จริง หรือget_build_history_reportสำหรับบันทึกการสร้างดิบ
เอกสาร
Appcircle MCP Server
เซิร์ฟเวอร์ MCP สำหรับ Appcircle: เปิดเผยเครื่องมือ Build, Signing Identities, Testing Distribution, Enterprise App Store, Publish to Stores และ Reporting ให้กับไคลเอนต์ที่รองรับ MCP ใดๆ (Claude Desktop, Cursor, VS Code ฯลฯ) Appcircle MCP Server ทำหน้าที่เป็นสะพานเชื่อมระหว่างเครื่องมือ AI และ Appcircle ดังนั้น เอเจนต์ AI, ผู้ช่วย และแชทบอทจึงสามารถเข้าถึงและโต้ตอบกับทรัพยากรของ Appcircle ได้อย่างปลอดภัยผ่านเครื่องมือที่มีโครงสร้าง ควบคุมได้ และระดับงาน
Use Cases
- CI/CD and Workflow Intelligence: ตรวจสอบการรันไปป์ไลน์ ติดตามสถานะรีลีส และรับข้อมูลเชิงลึกเกี่ยวกับเวิร์กโฟลว์ CI/CD บนมือถือของคุณ
- Configuration and Environment Insights: สอบถามการกำหนดค่าบิลด์และการตั้งค่าการลงนามเพื่อทำความเข้าใจว่าโปรเจกต์ถูกกำหนดค่าอย่างไรและปัญหาอาจเกิดขึ้นจากที่ใด
- Reporting and Operational Insights: สร้างสรุปความเสถียรของ CI, ปัญหาที่เกิดซ้ำ, ประสิทธิภาพของไปป์ไลน์ และสุขภาพโดยรวมของ CI/CD
Running Modes
คุณสามารถใช้เซิร์ฟเวอร์ MCP ได้สี่วิธี:
| Mode | Summary |
|---|---|
| 1. Remote host | เชื่อมต่อกับ https://mcp.appcircle.io. ไม่ต้องติดตั้งในเครื่อง; ไคลเอนต์ของคุณส่งโทเค็น Appcircle ของคุณ (เช่น Authorization: Bearer <token>) ในแต่ละคำขอ |
| 2. Local (stdio) | รันเซิร์ฟเวอร์จากซอร์ส: โคลนรีโพ, อาจใช้ venv, จากนั้นรัน appcircle-mcp (การขนส่งเริ่มต้นคือ stdio) ต้องใช้ Python และ pip ตั้งค่า APPCIRCLE_ACCESS_TOKEN ในสภาพแวดล้อม ไคลเอนต์ MCP ของคุณรันเซิร์ฟเวอร์เป็นกระบวนการย่อย |
| 3. Local (streamable-http) | รันเซิร์ฟเวอร์ในเครื่องผ่าน HTTP: ใช้ --transport streamable-http และอาจใช้ --host / --port (เช่น appcircle-mcp --transport streamable-http --host 127.0.0.1 --port 8000) ไคลเอนต์เชื่อมต่อกับ URL นั้นและส่งโทเค็นในคำขอ |
| 4. Local (Docker) | รันอิมเมจ Docker อย่างเป็นทางการบนเครื่องของคุณ ต้องใช้ Docker ใช้พอร์ตเริ่มต้นของอิมเมจหรือแทนที่ด้วย --port; ดูเอกสารประกอบของอิมเมจสำหรับการใช้งานที่แน่นอน |
การกำหนดค่าไคลเอนต์โดยละเอียด (Cursor, Claude ฯลฯ) อยู่ใน คู่มือการติดตั้ง เฉพาะ; ส่วนนี้เป็นเพียงสรุประดับสูงเท่านั้น
Installation
คู่มือการตั้งค่าเฉพาะไคลเอนต์:
- Claude Applications - คู่มือการติดตั้งสำหรับ Claude Desktop และ Claude Code CLI
- Cursor IDE - คู่มือการติดตั้งสำหรับ Cursor IDE
- Codex - คู่มือการติดตั้งสำหรับแอป Codex และ Codex CLI
- Antigravity IDE - คู่มือการติดตั้งสำหรับ Antigravity IDE
- VS Code (GitHub Copilot) - คู่มือการติดตั้งสำหรับ VS Code พร้อม GitHub Copilot
- Windsurf IDE - คู่มือการติดตั้งสำหรับ Windsurf IDE
- Gemini CLI - คู่มือการติดตั้งสำหรับ Gemini CLI
- GitHub Copilot CLI - คู่มือการติดตั้งสำหรับ GitHub Copilot CLI
Configuration (Environment Variables)
| Variable | Required | Description |
|---|---|---|
APPCIRCLE_ACCESS_TOKEN | ใช่ (stdio เท่านั้น) | โทเค็นการเข้าถึง API ของ Appcircle จำเป็นเมื่อใช้การขนส่ง stdio สำหรับ streamable-http แต่ละไคลเอนต์ส่งโทเค็นของตนเอง ดู การขอรับโทเค็น สำหรับวิธีรับ |
APPCIRCLE_API_URL | ไม่ | URL ฐานของ API (ค่าเริ่มต้น: https://api.appcircle.io อาจแตกต่างสำหรับผู้ใช้ที่โฮสต์เอง) |
APPCIRCLE_MCP_ALLOWED_HOST | ไม่ (streamable-http เท่านั้น) | ชื่อโฮสต์สาธารณะสำหรับเซิร์ฟเวอร์ MCP (เช่น mcp.appcircle.io) ตั้งค่านี้เมื่อปรับใช้หลัง reverse proxy เพื่อให้เซิร์ฟเวอร์ยอมรับส่วนหัว Host จากไคลเอนต์ ละเว้นสำหรับ localhost |
APPCIRCLE_MCP_PORT | ไม่ (streamable-http เท่านั้น) | พอร์ตที่ผูกสำหรับเซิร์ฟเวอร์ HTTP (ค่าเริ่มต้น: 8000) ถูกแทนที่โดย --port หากระบุ มีประโยชน์สำหรับ on-prem หรือ Docker เมื่อต้องการพอร์ตเฉพาะ |
LOG_LEVEL | ไม่ | ระดับการบันทึก เช่น DEBUG, INFO (ค่าเริ่มต้น: INFO) |
APPCIRCLE_EXCLUDED_TOOLSETS | ไม่ | ชุดเครื่องมือที่คั่นด้วยเครื่องหมายจุลภาคที่จะยกเว้น (เช่น build_module,report) ดู Toolsets ด้านล่าง |
ตั้งค่าเหล่านี้ในเชลล์ของคุณหรือในการกำหนดค่าไคลเอนต์ MCP ของคุณ
Toolsets
Available Toolsets
ชุดเครื่องมือต่อไปนี้พร้อมใช้งาน:
| Toolset | Description |
|---|---|
build_module | โปรไฟล์บิลด์, การกำหนดค่า, เวิร์กโฟลว์, คอมมิต และการดำเนินการไปป์ไลน์ |
signing_identities | ข้อมูลประจำตัวการลงนามและตัวระบุบันเดิล |
testing_distribution | โปรไฟล์การแจกจ่ายทดสอบและรายละเอียดการแจกจ่าย |
publish_to_stores | โปรไฟล์การเผยแพร่และการดำเนินการเผยแพร่ไปยังสโตร์ |
enterprise_app_store | โปรไฟล์สโตร์แอปองค์กรและรายละเอียดสโตร์ |
report | การรายงาน: ประวัติบิลด์, การแจกจ่าย, การลงนาม, สถานะการเผยแพร่ และรายงานที่เกี่ยวข้อง |
คุณสามารถยกเว้นชุดเครื่องมือหนึ่งชุดขึ้นไปเพื่อไม่ให้เครื่องมือของชุดนั้นถูกลงทะเบียน การยกเว้นสามารถตั้งค่าผ่านอาร์กิวเมนต์ CLI หรือตัวแปรสภาพแวดล้อม APPCIRCLE_EXCLUDED_TOOLSETS; ทั้งสองจะถูกรวมเข้าด้วยกัน (ยูเนียน)
- CLI:
--exclude toolset1 toolset2หรือ--exclude-toolsets toolset1,toolset2 - Env:
APPCIRCLE_EXCLUDED_TOOLSETS=build_module,report
ตัวอย่างการกำหนดค่า MCP (Cursor / Claude Desktop) พร้อมการยกเว้น:
{
"mcpServers": {
"appcircle": {
"command": "appcircle-mcp",
"args": ["--exclude", "report"]
}
}
}
Tools
เครื่องมือถูกเปิดเผยผ่าน MCP tools/list ข้อมูลอ้างอิงด้านล่างแสดงรายการเครื่องมือทั้งหมดตามชุดเครื่องมือ; สำหรับรูปร่างการตอบสนองและตัวอย่าง ดู docs/tool_contract.md
Build
-
get_build_profiles - รับโปรไฟล์บิลด์สำหรับองค์กรปัจจุบัน (แบ่งหน้า) สามารถกรองตามชื่อโปรไฟล์ได้
- Access level: read
page: หมายเลขหน้า (เริ่มจาก 1) ค่าเริ่มต้น: 1 (ตัวเลข, ไม่บังคับ)size: ขนาดหน้า (1-100) ค่าเริ่มต้น: 25 ค่าที่เกิน 100 จะถูกจำกัดไว้ที่ 100 (ตัวเลข, ไม่บังคับ)search: คำค้นหาเสริมเพื่อกรองโปรไฟล์ตามชื่อ (การจับคู่บางส่วนแบบไม่คำนึงถึงตัวพิมพ์เล็กใหญ่) (สตริง, ไม่บังคับ)
-
get_build_profile_details - รับโปรไฟล์บิลด์เดียวตาม ID โดยอาจรวมการกำหนดค่าบิลด์ของโปรไฟล์นั้นด้วย
- Access level: read
profile_id: ID โปรไฟล์บิลด์ (เช่น UUID) (สตริง, จำเป็น)configurations: หากเป็น true จะดึงการกำหนดค่าบิลด์ของโปรไฟล์ด้วย ค่าเริ่มต้น: false (บูลีน, ไม่บังคับ)
-
get_build_configuration_details - รับการกำหนดค่าบิลด์เดียวตาม ID โปรไฟล์และ ID การกำหนดค่า
- Access level: read
profile_id: ID โปรไฟล์บิลด์ (เช่น UUID) (สตริง, จำเป็น)configuration_id: ID การกำหนดค่าบิลด์ (เช่น UUID) (สตริง, จำเป็น)
-
get_build_profile_workflows - รับเวิร์กโฟลว์สำหรับโปรไฟล์บิลด์ตาม ID โปรไฟล์
- Access level: read
profile_id: ID โปรไฟล์บิลด์ (เช่น UUID) (สตริง, จำเป็น)
-
get_workflow_detail - รับเวิร์กโฟลว์เดียวตาม ID โปรไฟล์บิลด์และ ID เวิร์กโฟลว์
- Access level: read
profile_id: ID โปรไฟล์บิลด์ (เช่น UUID) (สตริง, จำเป็น)workflow_id: ID เวิร์กโฟลว์ (เช่น UUID) (สตริง, จำเป็น)
-
get_commits_by_branch - รับคอมมิตสำหรับสาขาบิลด์ (แบ่งหน้า)
- Access level: read
branch_id: ID สาขา (เช่น UUID) (สตริง, จำเป็น)page: หมายเลขหน้า (เริ่มจาก 1) หากระบุพร้อมกับขนาด จะเปิดใช้งานการแบ่งหน้า ค่าเริ่มต้น: 1 (ตัวเลข, ไม่บังคับ)size: ขนาดหน้า หากระบุพร้อมกับหน้า จะเปิดใช้งานการแบ่งหน้า ค่าเริ่มต้น: 25, สูงสุด 100 (ตัวเลข, ไม่บังคับ)
-
get_commit_details - รับคอมมิตเดียวตาม ID คอมมิต (UUID) หรือตามแฮชคอมมิต (git SHA) ระบุ commit_id หรือ commit_hash อย่างใดอย่างหนึ่ง ไม่ใช่ทั้งสองอย่าง
- Access level: read
commit_id: ID คอมมิต (UUID) (สตริง, ไม่บังคับ)commit_hash: แฮชคอมมิต (git SHA) (สตริง, ไม่บังคับ)
Signing Identities
-
get_bundle_identifiers - รับตัวระบุบันเดิลทั้งหมดสำหรับองค์กร (ID บันเดิลแอป iOS/macOS)
- Access level: read
- ไม่มีพารามิเตอร์
-
get_certificates - รับใบรับรองการลงนามทั้งหมดสำหรับองค์กร ฟิลด์ที่ละเอียดอ่อน (p12Password, p12Binary, metaData, thumbprint) จะถูกละเว้น
- Access level: read
- ไม่มีพารามิเตอร์
-
get_keystores - รับคีย์สโตร์ทั้งหมดสำหรับองค์กร (เช่น คีย์สโตร์การลงนาม Android) ฟิลด์ที่ละเอียดอ่อน (password, aliasPassword, binary, checkSum, sha256FingerPrint) จะถูกละเว้น
- Access level: read
- ไม่มีพารามิเตอร์
-
get_provisioning_profiles - รับโปรไฟล์การจัดเตรียมสำหรับองค์กร (เช่น iOS/macOS) ฟิลด์ที่ละเอียดอ่อน/ขนาดใหญ่ (binary, metaData, certificateThumbPrints, provisionedDevices, connectApiKeyId) จะถูกละเว้น สามารถกรองตาม ID แอป (บันเดิล) ได้
- Access level: read
app_id: ID แอป (บันเดิล) เสริมเพื่อกรองโปรไฟล์การจัดเตรียม (เช่น com.example.app) (สตริง, ไม่บังคับ)
Testing Distribution
-
get_distribution_profiles - รับโปรไฟล์การแจกจ่ายทดสอบสำหรับองค์กรปัจจุบัน (แบ่งหน้า) สามารถกรองตามชื่อโปรไฟล์ได้
- Access level: read
page: หมายเลขหน้า (เริ่มจาก 1) ค่าเริ่มต้น: 1 (ตัวเลข, ไม่บังคับ)size: ขนาดหน้า (1-100) ค่าเริ่มต้น: 25, สูงสุด 100 (ตัวเลข, ไม่บังคับ)search: คำค้นหาเสริมเพื่อกรองโปรไฟล์ตามชื่อ (สตริง, ไม่บังคับ)
-
get_distribution_profile_details - รับโปรไฟล์การแจกจ่ายทดสอบเดียวตาม ID (พร้อมการแบ่งหน้าเวอร์ชันแอปเสริม)
- Access level: read
profile_id: ID โปรไฟล์การแจกจ่าย (เช่น UUID) (สตริง, จำเป็น)page: หมายเลขหน้าสำหรับเวอร์ชันแอป (เริ่มจาก 1) ค่าเริ่มต้น: 1 (ตัวเลข, ไม่บังคับ)size: ขนาดหน้าสำหรับเวอร์ชันแอป (1-100) ค่าเริ่มต้น: 25, สูงสุด 100 (ตัวเลข, ไม่บังคับ)
Publish to Stores
-
get_publish_profiles - รับโปรไฟล์การเผยแพร่สำหรับองค์กรปัจจุบันสำหรับประเภทแพลตฟอร์มที่กำหนด (แบ่งหน้า) สามารถกรองตามสถานะโฟลว์ได้
- Access level: read
platform_type: ประเภทแพลตฟอร์มของโปรไฟล์การเผยแพร่ ("ios" หรือ "android") (สตริง, จำเป็น)page: หมายเลขหน้า (เริ่มจาก 1) ค่าเริ่มต้น: 1 (ตัวเลข, ไม่บังคับ)size: ขนาดหน้า (1-100) ค่าเริ่มต้น: 25, สูงสุด 100 (ตัวเลข, ไม่บังคับ)flow_status: รหัสสถานะโฟลว์เสริมเพื่อกรองตาม (เช่น 0=สำเร็จ, 1=ล้มเหลว, 91=กำลังทำงาน) (ตัวเลข, ไม่บังคับ)
-
get_publish_profile_details - รับโปรไฟล์การเผยแพร่เดียวตามประเภทแพลตฟอร์มและ ID (พร้อมการแบ่งหน้าเวอร์ชันแอปเสริม)
- Access level: read
platform_type: ประเภทแพลตฟอร์ม ("ios" หรือ "android") (สตริง, จำเป็น)profile_id: ID โปรไฟล์การเผยแพร่ (เช่น UUID) (สตริง, จำเป็น)page: หมายเลขหน้าสำหรับเวอร์ชันแอป (เริ่มจาก 1) ค่าเริ่มต้น: 1 (ตัวเลข, ไม่บังคับ)size: ขนาดหน้าสำหรับเวอร์ชันแอป (1-100) ค่าเริ่มต้น: 25, สูงสุด 100 (ตัวเลข, ไม่บังคับ)
Enterprise App Store
-
get_store_profiles - รับโปรไฟล์สโตร์แอปองค์กรสำหรับองค์กรปัจจุบัน (แบ่งหน้า)
- Access level: read
page: หมายเลขหน้า (เริ่มจาก 1) ค่าเริ่มต้น: 1 (ตัวเลข, ไม่บังคับ)size: ขนาดหน้า (1-100) ค่าเริ่มต้น: 25, สูงสุด 100 (ตัวเลข, ไม่บังคับ)
-
get_store_profile_details - รับโปรไฟล์สโตร์แอปองค์กรเดียวตาม ID (พร้อมการแบ่งหน้าเวอร์ชันแอปเสริม)
- Access level: read
profile_id: ID โปรไฟล์สโตร์แอปองค์กร (เช่น UUID) (สตริง, จำเป็น)page: หมายเลขหน้าสำหรับเวอร์ชันแอป (เริ่มจาก 1) ค่าเริ่มต้น: 1 (ตัวเลข, ไม่บังคับ)size: ขนาดหน้าสำหรับเวอร์ชันแอป (1-100) ค่าเริ่มต้น: 25, สูงสุด 100 (ตัวเลข, ไม่บังคับ)
Report
- **get_build_history_report** - รับรายงานประวัติการบิลด์ สามารถกรองตามช่วงวันที่ โปรไฟล์บิลด์ และองค์กรได้ มีการแบ่งหน้า - **ระดับการเข้าถึง:** อ่าน - `start_date`: วันที่เริ่มต้น (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ) - `end_date`: วันที่สิ้นสุด (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ) - `page`: หมายเลขหน้า (ค่าเริ่มต้น: 1) (ตัวเลข, ไม่บังคับ) - `size`: รายการต่อหน้า (1-100, ค่าเริ่มต้น: 50) (ตัวเลข, ไม่บังคับ) - `build_profile_name`: กรองตามชื่อโปรไฟล์บิลด์ (สตริง, ไม่บังคับ) - `organization_id`: กรองตาม UUID ขององค์กร (สตริง, ไม่บังคับ)-
get_build_insights_report - รับรายงานข้อมูลเชิงลึกของบิลด์ที่คำนวณแล้ว (ภาพรวมสถานะและแนวโน้ม, สาเหตุหลัก, สถานะอาร์ติแฟกต์, คุณภาพเวิร์กโฟลว์, เวลารอคิว และการประเมินความพร้อม) จากประวัติการบิลด์ โดยรวมผลทางฝั่งเซิร์ฟเวอร์ ต่างจาก get_build_history_report ตรงที่เครื่องมือนี้จะดึงข้อมูลทุกหน้าภายในและส่งคืนผลลัพธ์ที่รวมไว้ล่วงหน้าขนาดเล็กแทนที่จะเป็นระเบียนดิบ
- ระดับการเข้าถึง: อ่าน
start_date: วันที่เริ่มต้น (ไม่บังคับ) (YYYY-MM-DD) สำหรับช่วงเวลาปัจจุบัน ค่าเริ่มต้น: 30 วันที่ผ่านมา (สตริง, ไม่บังคับ)end_date: วันที่สิ้นสุด (ไม่บังคับ) (YYYY-MM-DD) สำหรับช่วงเวลาปัจจุบัน (สตริง, ไม่บังคับ)sections: รายการส่วนที่จะคำนวณ (ไม่บังคับ):health_snapshot,root_cause,artifact_health,workflow_quality,queue_time,maturity_assessmentค่าเริ่มต้น: ทั้งหกส่วน (อาร์เรย์ของสตริง, ไม่บังคับ)include_sub_orgs: หากเป็น true จะเก็บระเบียนบิลด์ข้ามองค์กรไว้ในเมตริกที่ได้จากประวัติ แทนที่จะกรองเฉพาะองค์กรของโทเค็นเอง ค่าเริ่มต้น: false (บูลีน, ไม่บังคับ)
-
get_distribution_app_version_report - รับรายงานการใช้งานรายวันสำหรับเวอร์ชันแอปที่แจกจ่าย มีการแบ่งหน้า รองรับการกรองตามโปรไฟล์, OS, องค์กร
- ระดับการเข้าถึง: อ่าน
start_date: วันที่เริ่มต้น (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ)end_date: วันที่สิ้นสุด (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ)page: หมายเลขหน้า (ค่าเริ่มต้น: 1) (ตัวเลข, ไม่บังคับ)size: รายการต่อหน้า (1-100, ค่าเริ่มต้น: 50) (ตัวเลข, ไม่บังคับ)profile_name: กรองตามชื่อโปรไฟล์การแจกจ่าย (สตริง, ไม่บังคับ)os: กรองตาม OS ("ios" หรือ "android") (สตริง, ไม่บังคับ)organization_id: กรองตาม UUID ขององค์กร (สตริง, ไม่บังคับ)
-
get_distribution_sent_report - รับรายงานการใช้งานรายวันสำหรับการแชร์แอปที่แจกจ่าย มีการแบ่งหน้า รองรับการกรองตามโปรไฟล์, OS, องค์กร
- ระดับการเข้าถึง: อ่าน
start_date: วันที่เริ่มต้น (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ)end_date: วันที่สิ้นสุด (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ)page: หมายเลขหน้า (ค่าเริ่มต้น: 1) (ตัวเลข, ไม่บังคับ)size: รายการต่อหน้า (1-100, ค่าเริ่มต้น: 50) (ตัวเลข, ไม่บังคับ)profile_name: กรองตามชื่อโปรไฟล์การแจกจ่าย (สตริง, ไม่บังคับ)os: กรองตาม OS ("ios" หรือ "android") (สตริง, ไม่บังคับ)organization_id: กรองตาม UUID ขององค์กร (สตริง, ไม่บังคับ)
-
get_enterprise_app_store_app_usage_report - รับรายงานการใช้งานแอปสำหรับ App Store องค์กร ต้องระบุ start_date และ end_date มีการแบ่งหน้า
- ระดับการเข้าถึง: อ่าน
start_date: วันที่เริ่มต้น (YYYY-MM-DD) (สตริง, จำเป็น)end_date: วันที่สิ้นสุด (YYYY-MM-DD) (สตริง, จำเป็น)page: หมายเลขหน้า (ค่าเริ่มต้น: 1) (ตัวเลข, ไม่บังคับ)size: รายการต่อหน้า (1-100, ค่าเริ่มต้น: 50) (ตัวเลข, ไม่บังคับ)organization_id: ตัวกรองตาม UUID ขององค์กร (ไม่บังคับ) (สตริง, ไม่บังคับ)
-
get_publish_resign_report - รับรายงานการลงนามใหม่เพื่อเผยแพร่ สามารถกรองตามช่วงวันที่, ชื่อแอป, องค์กร และสถานะได้ มีการแบ่งหน้า
- ระดับการเข้าถึง: อ่าน
start_date: วันที่เริ่มต้น (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ)end_date: วันที่สิ้นสุด (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ)page: หมายเลขหน้า (ค่าเริ่มต้น: 1) (ตัวเลข, ไม่บังคับ)size: รายการต่อหน้า (1-100, ค่าเริ่มต้น: 50) (ตัวเลข, ไม่บังคับ)app_name: กรองตามชื่อแอป (สตริง, ไม่บังคับ)organization_id: กรองตาม UUID ขององค์กร (สตริง, ไม่บังคับ)status: กรองตามสถานะการลงนามใหม่ (0=รอ, 1=กำลังดำเนินการ, 2=สำเร็จ, 3=ล้มเหลว, 4=ยกเลิก, 5=หมดเวลา) (ตัวเลข, ไม่บังคับ)
-
get_publish_status_report - รับรายงานสถานะการเผยแพร่ สามารถกรองตามช่วงวันที่, ชื่อแอป, องค์กร และสถานะได้ มีการแบ่งหน้า
- ระดับการเข้าถึง: อ่าน
start_date: วันที่เริ่มต้น (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ)end_date: วันที่สิ้นสุด (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ)page: หมายเลขหน้า (ค่าเริ่มต้น: 1) (ตัวเลข, ไม่บังคับ)size: รายการต่อหน้า (1-100, ค่าเริ่มต้น: 50) (ตัวเลข, ไม่บังคับ)app_name: กรองตามชื่อแอป (สตริง, ไม่บังคับ)organization_id: กรองตาม UUID ขององค์กร (สตริง, ไม่บังคับ)status: กรองตามสถานะการเผยแพร่ (เช่น 0=สำเร็จ, 1=ล้มเหลว, 91=กำลังทำงาน) (ตัวเลข, ไม่บังคับ)
-
get_signing_report - รับรายงานการลงนาม สามารถกรองตามช่วงวันที่, องค์กร, OS และสถานะบิลด์ได้ มีการแบ่งหน้า
- ระดับการเข้าถึง: อ่าน
start_date: วันที่เริ่มต้น (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ)end_date: วันที่สิ้นสุด (ไม่บังคับ) (YYYY-MM-DD) (สตริง, ไม่บังคับ)page: หมายเลขหน้า (ค่าเริ่มต้น: 1) (ตัวเลข, ไม่บังคับ)size: รายการต่อหน้า (1-100, ค่าเริ่มต้น: 50) (ตัวเลข, ไม่บังคับ)organization_id: กรองตาม UUID ขององค์กร (สตริง, ไม่บังคับ)os: กรองตาม OS ("ios" หรือ "android") (สตริง, ไม่บังคับ)build_status: กรองตามสถานะบิลด์ (เช่น 0=สำเร็จ, 1=ล้มเหลว, 91=กำลังทำงาน) (ตัวเลข, ไม่บังคับ)
การรันเซิร์ฟเวอร์
จากรูทของรีโป:
python -m src.server
หรือหลังจาก pip install -e .:
appcircle-mcp
เซิร์ฟเวอร์ทำงานผ่าน stdio (หรือ SSE/HTTP ขึ้นอยู่กับวิธีที่ไคลเอนต์ของคุณเริ่มต้น)
รูปแบบการตอบกลับ
ทุกเครื่องมือจะส่งคืน ซองจดหมายมาตรฐาน:
- สำเร็จ:
{ "success": true, "data": <payload>, "meta": { ... } }
dataคือผลลัพธ์ของเครื่องมือ;metaเป็นทางเลือก (เช่นcount,page,filters) - ข้อผิดพลาด:
{ "success": false, "error": { "tool", "type", "message", "details" } }
รูปแบบเดียวกันสำหรับทุกเครื่องมือเพื่อให้ไคลเอนต์สามารถแยกวิเคราะห์ข้อผิดพลาดได้อย่างสม่ำเสมอ
ข้อกำหนดฉบับเต็ม: docs/tool_contract.md
การทดสอบ
ติดตั้งพร้อมกับ dependencies สำหรับการพัฒนา:
pip install -e ".[dev]"
การทดสอบหน่วย (ค่าเริ่มต้น)
ใช้ API จำลอง; ไม่จำเป็นต้องใช้ APPCIRCLE_ACCESS_TOKEN ค่าเริ่มต้น pytest จะรันเฉพาะการทดสอบเหล่านี้ (ดู testpaths ใน pyproject.toml):
pytest test/unit/ -v
- ไฟล์เดียว:
pytest test/unit/tools/build_module/test_get_build_profiles.py -v - พร้อมการวัดความครอบคลุม:
pytest test/unit/ --cov=src --cov-report=term-missing
การทดสอบการรวมระบบ
เรียกใช้ Appcircle API จริง ตั้งค่า APPCIRCLE_ACCESS_TOKEN ใน environment จากนั้นรัน:
pytest test/integration/ -v
- การทดสอบการรวมระบบทั้งหมด:
pytest test/integration/ -v - ตามเครื่องมือ:
pytest test/integration/build_module/ -v,pytest test/integration/report/ -vฯลฯ - ตาม marker:
pytest -m integration -v(เมื่อรันจากรูทของรีโป; จะรวมเฉพาะการทดสอบการรวมระบบหากมีการรวบรวมทั้งการทดสอบหน่วยและการรวมระบบ)
หากไม่ได้ตั้งค่า APPCIRCLE_ACCESS_TOKEN การทดสอบการรวมระบบจะถูก ข้าม (ไม่ถือว่าล้มเหลว)
ตัวแปรสภาพแวดล้อมทางเลือกสำหรับการทดสอบการรวมระบบ (เมื่อการค้นพบล้มเหลวหรือการทดสอบต้องการ ID จริง; ละเว้นเพื่อข้ามการทดสอบเหล่านั้น):
| ตัวแปร | คำอธิบาย |
|---|---|
APPCIRCLE_TEST_ORGANIZATION_ID | UUID ขององค์กร ใช้โดย test_with_organization_id (รายงานการใช้งานแอป App Store องค์กร) |
APPCIRCLE_TEST_BRANCH_ID | UUID ของ branch ใช้โดย get_commits_by_branch และการทดสอบที่เกี่ยวข้องเมื่อไม่สามารถค้นพบ branch จาก API ได้ |
APPCIRCLE_TEST_COMMIT_ID | UUID ของ commit ใช้โดยการทดสอบ get_commit_details เมื่อไม่สามารถค้นพบ commit จาก API ได้ |
ความปลอดภัย
โปรเจกต์นี้ขึ้นอยู่กับแพ็คเกจโอเพนซอร์สของบุคคลที่สามที่ระบุไว้ใน
pyproject.toml แม้ว่าเราจะปักหมุดช่วงเวอร์ชันของ dependencies และ
จัดส่ง lockfile (uv.lock) พร้อมแฮชเข้ารหัส แต่แพ็คเกจเหล่านี้ได้รับการดูแล
อย่างอิสระและให้มา "ตามสภาพ" Appcircle ไม่รับประกันใดๆ
เกี่ยวกับความปลอดภัยหรือความน่าเชื่อถือของ dependencies ของบุคคลที่สาม
เราแนะนำให้ตรวจสอบแพ็คเกจที่ติดตั้งก่อนใช้งาน:
uv run pip-audit