CodeView MCP ðª
ããŒã«ã«CodeView MCP ðª ã«ã€ããŠ
CodeView MCPã¯ããã«ãªã¯ãšã¹ããããŒã«ã«ã®å€æŽãå·®åã確èªããMCPãµãŒããŒãCLIãGitHub Actionã§ããæ£èŠè¡šçŸã«ããã»ãã¥ãªãã£æ€æ»ãšä»»æã®AIåæãçµã¿åãããè¡ã«çŽã¥ãææãå€å®ããªã¹ã¯ã¹ã³ã¢ãåºåããŸãã
äž»ãªæ©èœ
- 01ãã«ãªã¯ãšã¹ããããŒã«ã«å€æŽãå·®åã®ã¬ãã¥ãŒ
- 02æ£èŠè¡šçŸã«ãŒã«ã«ããã»ãã¥ãªãã£æ€åº
- 03ä»»æã®AIã«ãããã°ã»ãã¹ãåæ
- 04ææãå€å®ããªã¹ã¯ã¹ã³ã¢ã®åºå
- 05GitHubãžã®ã€ã³ã©ã€ã³ã³ã¡ã³ããšã¬ããŒãæçš¿
掻çšã·ãŒã³
- 01GitHubãã«ãªã¯ãšã¹ãã®ã¬ãã¥ãŒ
- 02ã¹ããŒãžæžã¿ãŸãã¯æªã³ããã倿Žã®ç¢ºèª
- 03é倧床ããªã¹ã¯ã«åºã¥ãCIå¶åŸ¡
- 04ã€ã³ã©ã€ã³ã³ã¡ã³ããšSARIFã®çæ
MCP 察å¿
MCPãµãŒããŒã¯ããã«ãªã¯ãšã¹ããããŒã«ã«å€æŽãå·®åããã¹ãã®ã¬ãã¥ãŒãPRå·®åã®ååŸãã¬ãã¥ãŒæçš¿ãã«ãŒã«ãšãããã€ããŒç¶æ ã®ç¢ºèªããŒã«ãå ¬éããŸããã¬ãã¥ãŒçšããã³ãããšãªãœãŒã¹ãæäŸããstdioãŸãã¯ããŒã«ã«ã®Streamable HTTPãšã³ããã€ã³ãã§å©çšã§ããŸãã
èšå®
ããŒã«ã«ãµãŒããŒã®èšå®ã¯ã©ã®ã¯ã©ã€ã¢ã³ãã§ãå ±éã§ããã³ããŒããŠã¯ã©ã€ã¢ã³ãã® MCP èšå®ãã¡ã€ã«ã«è²Œãä»ããŠãã ããã
ãã®ãµãŒããŒã®ããã±ãŒãžããªã¢ãŒããšã³ããã€ã³ãã¯ãŸã ååŸã§ããŠããŸããããããžã§ã¯ãã® README ã®æé ã«åŸã£ãŠãã ããã
ããŒã«
ããŒã«ã«ãµãŒããŒã®ããŒã«ã¯ãã·ã³äžã§èµ·åããŠåããŠååŸã§ããŸããã¡ã³ãããŒã¯ãŸã ããŒã«äžèЧãæäŸããŠããŸããã
詳现
codeview
codeview ã¯ãGitHub ã®ãã«ãªã¯ãšã¹ããããŒã«ã«ã®æªã³ãããã®äœæ¥ããŸãã¯ä»»æã®å·®åã®ã³ãŒã倿Žãã¬ãã¥ãŒããŸãã MCP ãµãŒããŒãšããŠïŒãšãã£ã¿ãŒã®ã¢ã·ã¹ã¿ã³ãããåŒã³åºããŸãïŒãã³ãã³ãã©ã€ã³ããŒã«ãšããŠããŸã GitHub Action ãšããŠåäœããŸãã
åã¬ãã¥ãŒã¯æ¬¡ã® 2 ã€ã®éšåã§æ§æãããŸãã
- 远å ãããè¡ã«å¯ŸããŠå®è¡ãããçŽ 50 åã®æ£èŠè¡šçŸã«ãŒã«ã§ããã³ããããããã·ãŒã¯ã¬ãããæååãã©ãŒãããã§æ§ç¯ããã SQLã
evalãshell=TrueãTLS æ€èšŒã®ç¡å¹åããªã¹ã¯ã®é«ã GitHub Actions ã¯ãŒã¯ãããŒãªã©ãæ€åºããŸãã - ããžãã¯ã®ãã°ããšããžã±ãŒã¹ããã¹ãã®äžè¶³ãæ¢ããªãã·ã§ã³ã® AI ãã¹ã§ããç¡ææ ã®ãããããã€ããŒïŒGeminiãGroqãCerebrasãOpenRouterïŒããOllama çµç±ã®ããŒã«ã«ã¢ãã«ã®ã¿ã䜿çšãããããå®è¡ã«è²»çšã¯ããããŸããã
åºåã¯ããã¡ã€ã«ãšè¡ã«ã²ãä»ããææäºé ãå€å®ãããã³ãã®çç±ã瀺ã 0ïœ100 ã®ãªã¹ã¯ã¹ã³ã¢ã§ãã
ã€ã³ã¹ããŒã«
Python 3.11 以éãå¿ èŠã§ãã
pip install git+https://github.com/mann-uofg/codeview-mcp
ãŸãã¯ãuv ã䜿ã£ãŠã€ã³ã¹ããŒã«ããã«å®è¡ã§ããŸãã
uvx --from git+https://github.com/mann-uofg/codeview-mcp codeview review
äœ¿ãæ¹
codeview review https://github.com/psf/requests/pull/6883 # a pull request
codeview review owner/repo#123 # short form
codeview review # uncommitted changes in the current repo
codeview review --staged # only staged changes
codeview review --branch --base main # current branch vs main
git diff HEAD~3 | codeview review --diff - # any diff
ãããªãã¯ãªããžããªã¯ããŒã¯ã³ãªãã§å©çšã§ããŸãããã©ã€ããŒããªããžããªã䜿ãå ŽåããŸãã¯ã¬ãã¥ãŒãæçš¿ããå Žåã¯ãGITHUB_TOKEN ãèšå®ããŠãã ããã
gh CLI ã«ãã°ã€ã³ããŠããå Žåã¯ããã®ããŒã¯ã³ãèªåçã«ååŸãããŸãã
ãã®ä»ã®äŸ¿å©ãªãªãã·ã§ã³ïŒ
-f, --format text|markdown|json|sarif
-o, --output FILE
--json-output FILE / --sarif-output FILE write extra reports in the same run
--post [--dry-run] publish the review to the PR as inline comments
--fail-on high exit 1 if any finding is high or worse (default: high)
--max-risk 60 exit 1 if the risk score is above 60
--no-ai rules only
--provider gemini --model ... pick the AI provider/model
--focus security ask the AI to concentrate on something
codeview rules ã¯ãã¹ãŠã®ã«ãŒã«ãäžèŠ§è¡šç€ºããcodeview providers ã¯èšå®æžã¿ã® AI ãããã€ããŒã衚瀺ããŸãããŸããcodeview init ã¯åæèšå®çšã®èšå®ãã¡ã€ã«ãæžã蟌ã¿ãŸãã
AI ãããã€ããŒ
次ã®ãããããèšå®ããŠãã ãããè€æ°èšå®ãããŠããå Žåã¯ã次ã®é ã«è©Šè¡ãã倱æããå ŽåãŸãã¯ã¬ãŒãå¶éã«éããå Žåã¯æ¬¡ã«é²ã¿ãŸãã
| ãããã€ã㌠| ç°å¢å€æ° | ããŒã®ååŸå |
|---|---|---|
| Google Gemini | GEMINI_API_KEY | https://aistudio.google.com/apikey |
| Groq | GROQ_API_KEY | https://console.groq.com/keys |
| Cerebras | CEREBRAS_API_KEY | https://cloud.cerebras.ai |
| OpenRouterïŒç¡æã¢ãã«ïŒ | OPENROUTER_API_KEY | https://openrouter.ai/keys |
| OllamaïŒããŒã«ã«ïŒ | CODEVIEW_OLLAMA=1 ãŸã㯠OLLAMA_HOST | https://ollama.com |
| ä»»æã® OpenAI äºæ API | CODEVIEW_BASE_URLãCODEVIEW_MODELãCODEVIEW_API_KEY |
åãããã€ããŒã«ã¯ãç¡ææ ã«é©ããããã©ã«ãã¢ãã«ãèšå®ãããŠããŸããcodeview providers ã§ã¢ãã«ã確èªã§ãã--model ãŸã㯠CODEVIEW_MODEL ã§äžæžãã§ããŸããå·®åã¯åãããã€ããŒã®å¶éã«åãŸãããã«åãè©°ããããã¬ã¹ãã³ã¹ã¯ããŒã«ã«ã«ãã£ãã·ã¥ããããããåãå·®åãå床ã¬ãã¥ãŒããŠãã¯ã©ãŒã¿ã¯æ¶è²»ãããŸããã
ãããã€ããŒãèšå®ãããŠããªãå Žåã§ããã«ãŒã«ã¯å®è¡ãããŸãã
MCP ãµãŒããŒ
MCP ã¯ã©ã€ã¢ã³ãã®èšå®ã«æ¬¡ã®å 容ã远å ããŠãã ããïŒCursorãWindsurfãZed ãªã©ããã®åœ¢åŒã䜿çšããŸãïŒã
{
"mcpServers": {
"codeview": {
"command": "uvx",
"args": ["--from", "git+https://github.com/mann-uofg/codeview-mcp", "codeview", "serve"],
"env": { "GEMINI_API_KEY": "...", "GITHUB_TOKEN": "..." }
}
}
}
VS Code ã®å Žåã¯ãåãå
容ã .vscode/mcp.json ã® "servers" ã®äžã« "type": "stdio" ãšãšãã«èšè¿°ããŠãã ããã
codeview serve --http ãå®è¡ãããšã127.0.0.1:8765/mcp ã§ Streamable HTTP ãµãŒããŒãèµ·åããŸãã
ããŒã«ïŒ
review_pull_requestïŒPR ãã¬ãã¥ãŒããŸãreview_local_changesïŒäœæ¥ããªãŒãã¹ããŒãžæžã¿ã®å€æŽããŸãã¯ãã©ã³ãã®å€æŽãã¬ãã¥ãŒããŸãreview_diff_textïŒããã¹ããšããŠæž¡ãããå·®åãã¬ãã¥ãŒããŸãget_pull_request_diffïŒã¢ã·ã¹ã¿ã³ããèªåã§ç¢ºèªããããã®ãPR ã¡ã¿ããŒã¿ãšè¡çªå·ä»ãã®å·®åãååŸããŸãpost_reviewïŒã¬ãã¥ãŒã GitHub ã«æçš¿ããŸããdry_run=falseãæž¡ãããªãéããã©ã€ã©ã³ãšãªãããã§ã«æçš¿ãããã³ã¡ã³ãã¯ã¹ããããããŸããlist_rulesãprovider_status
ããã³ããïŒdeep_reviewãsecurity_auditãsuggest_testsãreview_my_changesïŒãšãªãœãŒã¹ïŒcodeview://rulesãcodeview://providersãcodeview://config/exampleïŒãæäŸããŸãã
GitHub Action
name: codeview
on: pull_request
permissions:
contents: read
pull-requests: write # to post the review
security-events: write # only needed for the SARIF upload
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: mann-uofg/codeview-mcp@v2
with:
gemini-api-key: ${{ secrets.GEMINI_API_KEY }} # optional
fail-on: critical
- uses: github/codeql-action/upload-sarif@v4
if: always()
with:
sarif_file: codeview.sarif
ãã® Action ã¯ãæŠèŠãšã€ã³ã©ã€ã³ã³ã¡ã³ããå«ãã¬ãã¥ãŒã 1 ä»¶æçš¿ãããžã§ãã®æŠèŠãæžã蟌ã¿ãrisk-scoreãrisk-levelãverdictãfindings ã®åºåãèšå®ããŸãããã©ãŒã¯ããã®ãã«ãªã¯ãšã¹ãã«ã¯èªã¿åãå°çšããŒã¯ã³ãä»äžããããããã¬ãã¥ãŒã¯æçš¿ãããŸãããããžã§ãã®æŠèŠãš SARIF ã¯åŒãç¶ãæ©èœããŸãããã¹ãŠã®å
¥å㯠action.yml ã«èšèŒãããŠããŸãã
èšå®
ãªããžããªã®ã«ãŒãã« .codeview.toml ãé
眮ããããpyproject.toml ã« [tool.codeview] ããŒãã«ã远å ããŸãã
provider = "auto"
min_severity = "low" # hide findings below this
fail_on = "high" # or "never"
max_findings = 30
exclude = ["docs/**", "**/*.generated.ts"]
disable_rules = ["CV-QUAL-006"]
focus = ["security"]
instructions = "We use SQLAlchemy 2.x. Flag raw SQL built with string formatting."
[[custom_rules]]
id = "TEAM-001"
pattern = "print\\("
message = "Use the logger instead of print()."
severity = "low"
paths = ["src/**/*.py"]
1 è¡ãç¡èŠããã«ã¯ããã®è¡ã« codeview-ignore ã³ã¡ã³ãã远å ããŸããç¹å®ã®ã«ãŒã«ãç¡èŠããã«ã¯ãcv-ignore[CV-SEC-020] ã远å ããŸãã
ãã«ãªã¯ãšã¹ããã¬ãã¥ãŒãããšããèšå®ã¯ PR ã§ã¯ãªãããŒã¹ãã©ã³ãããèªã¿èŸŒãŸããŸããããã«ãããPR ã§æ€åºãç¡å¹ã«ã§ããªãããã«ããŠããŸãã
ã»ãã¥ãªãã£ã«é¢ããæ³šæ
codeview ã¯ä»ã®äººãå¶åŸ¡ããå ¥åãèªã¿åããããæ¬¡ã®å¯Ÿçãè¡ã£ãŠããŸãã
- å·®åãš PR ã®ããã¹ãã¯ããŒã¿ãšããŠã¢ãã«ã«æž¡ããããã®äžã«æžãããæç€ºã«ã¯åŸããªãããæç€ºãããŸããã¢ãã«ã®åçã¯æ€èšŒãããå·®åã«å«ãŸããŠããªããã¡ã€ã«ãè¡ãæãç€ºãæ€åºçµæã¯ç Žæ£ãããŸãã
- GitHub ã«æçš¿ãããããã¹ãã§ã¯ã
@mentionsã課é¡ãã¯ããŒãºããããŒã¯ãŒããç»åãHTML ã³ã¡ã³ããç¡å¹åãããŸãã - ããŒã«ã«ã® git ã³ãã³ãã§ã¯ãå€éš diff ãã©ã€ããŒãtextconvãfsmonitorãããŒãžã£ãŒãç¡å¹ã«ãªããŸããåç §ã¯æ€èšŒãããã·ã³ããªãã¯ãªã³ã¯ã¯ãã©ããŸããã
- åãä»ããã®ã¯ãGitHub ãã¹ãäžã® PR URL ã®ã¿ã§ããAPI ããŒããããŒã«ã«ä»¥å€ã®ãã¹ããžå¹³æã® HTTP ã§éä¿¡ãããããšã¯ãããŸããã
- HTTP ãã©ã³ã¹ããŒã㯠localhost ã®ã¿ã§åŸ ã¡åããHost/Origin ããããŒãæ€èšŒããŸãã
è匱æ§ãå ±åããã«ã¯ãSECURITY.md ãã芧ãã ããã
éçº
git clone https://github.com/mann-uofg/codeview-mcp
cd codeview-mcp
uv sync
uv run pytest
uv run ruff check . && uv run mypy
CONTRIBUTING.md ãã芧ãã ããã倿Žå 容㯠CHANGELOG.md ã«èšèŒãããŠããŸãã
ã©ã€ã»ã³ã¹
MIT
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã