EasyPR MCP server
2026년 10월 27일 커밋초보자가 코드베이스를 이해하고 오픈 소스 기여를 준비할 수 있도록 AI 어시스턴트에게 읽기 전용 저장소 검사 기능을 제공합니다.
다른 이름 Ankith34/EasyPR
- 스타
- 1
- Tools
- 3
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 10월 27일
- 라이선스
- MIT
EasyPR MCP란?
EasyPR은(는) MCP server입니다. 초보자가 코드베이스를 이해하고 오픈 소스 기여를 준비할 수 있도록 AI 어시스턴트에게 읽기 전용 저장소 검사 기능을 제공합니다. 3개 도구를 제공합니다. 예: inspect_repository, get_setup_guide, find_relevant_code.
프로젝트 README에서 생성된 요약
EasyPR MCP server 정보
EasyPR는 초보자가 생소한 코드베이스를 파악하고 오픈 소스 기여를 준비할 수 있도록 돕습니다. 이 읽기 전용 MCP server는 AI 어시스턴트가 추측할 필요 없이 저장소 구조, 설정 요구 사항 및 관련 파일을 이해하는 데 필요한 사실적 근거를 제공합니다. 안전을 보장하기 위해 사용자가 --root 플래그나 환경 변수를 사용하여 특정 디렉토리를 승인해야 하는 로컬 stdio server로 작동합니다.
개발자는 inspect_repository 도구를 사용하여 최상위 레이아웃과 언어별 코드 수를 확인할 수 있으며, get_setup_guide를 통해 README 파일이나 CI 워크플로에서 설치 및 테스트 단계를 추출할 수 있습니다. 특정 작업의 경우 find_relevant_code 도구가 쿼리와 관련된 파일 및 줄 번호를 식별합니다. 반환되는 모든 정보에는 fact, documented, inferred, suggestion과 같은 근거 레이블이 포함되어 사용자가 결과의 신뢰도를 정확히 파악할 수 있습니다. 이 서버는 저장소 코드나 shell 명령을 절대 실행하지 않도록 보수적으로 설계되었습니다.
활용 사례
- 1새 프로젝트 이해하기AI 어시스턴트에게 저장소 레이아웃을 설명하고 핵심 파일을 식별하도록 요청합니다.
- 2설치 단계 학습하기프로젝트 자체 문서에서 설정 및 테스트를 위한 특정 명령어를 가져옵니다.
- 3이슈 관련 코드 찾기버그 리포트나 기능 요청과 가장 관련이 깊은 특정 파일과 줄 번호를 찾습니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
EasyPR MCP 도구 3
README에서 감지됨inspect_repositoryget_setup_guidefind_relevant_code
| inspect_repository | — | |
| get_setup_guide | — | |
| find_relevant_code | — |
자동 검사
2026년 11월 14일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능ankith34/easypr is public and reachablegithub.com/ankith34/easypr ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)MITspdx.org/licenses/MIT.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-10-27github.com/ankith34/easypr ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음3 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨No tool named like delete, drop or exec통과
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기EasyPR
Your first PR starts here.
A read only MCP server that gives your AI assistant the evidence it needs to guide you through an unfamiliar repository, from "what is this project?" to "I'm ready to open a pull request."
Quick start · How it works · Tools · Safety · Roadmap · FAQ · Contributing
git clone https://github.com/Ankith34/EasyPR.git && cd EasyPR && pip install -e .
[!NOTE] EasyPR is in alpha. Three tools work today and are covered by an automated test suite. Anything not listed as working in Status and roadmap is planned, not shipped.
Why EasyPR
Experienced developers can size up a new codebase in minutes. Beginners can lose an afternoon before they find the right file. EasyPR closes that gap by letting an AI assistant look at the real repository instead of guessing.
| Without EasyPR | With EasyPR |
|---|---|
| The assistant guesses how the project is laid out | It reads the actual layout, languages and key files |
| Setup commands are invented from habit | Commands come from the project's own README and CI, each labelled by source |
| "The bug is probably in the auth code" | Ranked files with line numbers and a plain reason for each match |
| You can't tell fact from guess | Every finding carries an evidence label |
EasyPR is the tool layer, not a chatbot. Your MCP-compatible AI client does the conversation and reasoning. EasyPR supplies the facts.
Quick start
Requires Python 3.10 or newer.
1. Install
git clone https://github.com/Ankith34/EasyPR.git
cd EasyPR
python -m venv .venv
source .venv/bin/activate
pip install -e .
easypr --version
2. Connect your AI client
EasyPR runs as a local stdio server. You must approve at least one directory with --root. It refuses to start without one.
For clients that use the common mcpServers JSON format:
{
"mcpServers": {
"easypr": {
"command": "/absolute/path/to/EasyPR/.venv/bin/easypr",
"args": ["--root", "/home/you/projects"]
}
}
}
For Claude Code:
claude mcp add easypr -- /absolute/path/to/EasyPR/.venv/bin/easypr --root ~/projects
Use the full path to easypr inside your virtual environment so the client can find it. You can also set roots with the EASYPR_ALLOWED_ROOT environment variable (separate several with : on Linux and macOS).
3. Ask your assistant
Inspect ~/projects/some-repo and tell me what it does and where to start reading.
How does some-repo say I should install it and run its tests?
Here is the issue I want to work on: "<paste issue text>".
Which files in ~/projects/some-repo should I read first, and why?
Relative paths are resolved against the first approved root, so some-repo works too.
npx @modelcontextprotocol/inspector easypr --root ~/projects
EasyPR has been tested with the official Python MCP SDK client over stdio. If a specific client misbehaves, please open an issue.
How it works
flowchart LR
You(["You"]) -->|"ask about a repo"| Client["AI client<br/>(MCP-compatible)"]
Client -->|"tool calls over stdio"| Server["EasyPR server<br/>server.py"]
Server --> Core["repository.py<br/>read-only inspection"]
Core -->|"approved roots only"| Repo[("Your repository")]
Core -->|"evidence-labelled results"| Server
Server --> Client
Client -->|"plain-language guidance"| You
The server layer is deliberately thin. All inspection logic and every safety check lives in repository.py, which is plain Python with no MCP dependency. You can test it directly or import it as a library.
The first-contribution workflow
| Step | What a beginner needs | Covered by |
|---|---|---|
| 1 | Understand the repository | inspect_repository ✅ |
| 2 | Know how to install, run and test it | get_setup_guide ✅ |
| 3 | Find the code related to an issue | find_relevant_code ✅ (you supply the issue text) |
| 4 | Plan a small, understandable change | Your AI client, reasoning over EasyPR's evidence |
| 5 | Validate the change | run_project_checks 🗓️ planned |
| 6 | Prepare the pull request | 🗓️ planned |
Evidence labels
EasyPR never presents a guess as a fact. Every finding says how much to trust it.
| Label | Meaning | Example |
|---|---|---|
fact |
Observed directly in the repository | LICENSE exists at the root |
documented |
The project itself says so | An install block in the README, a run: step in CI |
inferred |
EasyPR's guess from names or contents | pip install -e . because pyproject.toml exists |
suggestion |
A next step a human still has to verify | "Start by reading app/auth.py around line 4" |
Setup commands are always reported as verified: false. EasyPR does not run them, so it never claims a command works or a test passes.
Tools
All three tools are read-only and are advertised to clients with MCP read-only hints.
| Tool | You get | Inputs |
|---|---|---|
inspect_repository |
Top-level layout, important files (README, CONTRIBUTING, license, manifests, CI), language counts, project type, detected frameworks | path |
get_setup_guide |
Setup and test steps from the README, run: commands from CI workflows, and labelled hints from manifests |
path |
find_relevant_code |
Ranked files for a task or issue, each with role (source, test, docs, config), matching lines with numbers and snippets, and a plain-language reason | path, query, max_results (1-25, default 10) |
What EasyPR reads
| Source | What it extracts | Label |
|---|---|---|
README.md code blocks under setup-like headings (install, usage, test, ...) |
Commands with file and line number | documented |
.github/workflows/*.yml |
Single-line and block run: commands |
documented |
requirements*.txt, pyproject.toml, setup.py, setup.cfg, pytest.ini, tox.ini |
Install and test hints | inferred |
package.json and lockfiles |
Package manager and test / build / start / dev / lint scripts |
inferred |
Makefile |
Common targets such as test, lint, build |
inferred |
Cargo.toml, go.mod, pom.xml, build.gradle, Gemfile, composer.json, mix.exs |
Standard build and test commands | inferred |
.env.example |
A note to copy it and add your own values (never read) | inferred |
Query: login_user rejects wrong password (trimmed):
{
"path": "app/auth.py",
"role": "source",
"matches": [
{ "line": 4, "text": "def login_user(username, password):", "is_definition": true }
],
"why": "Keyword match: 3 line(s) mention 'login', 'login_user', 'password', 'user'; it defines a function/class/type that mentions them. Verify by reading the code.",
"kind": "inferred"
}
Suggestions that accompany the results:
[
{ "text": "Start by reading app/auth.py around line 4.", "kind": "suggestion" },
{ "text": "See tests/test_auth.py for how related behaviour is tested.", "kind": "suggestion" }
]
Use it as a Python library
The core has no MCP dependency, so you can call it directly.
from easypr.repository import find_relevant_code, inspect_repository, parse_allowed_roots
roots = parse_allowed_roots(["~/projects"])
overview = inspect_repository("some-repo", allowed_roots=roots)
hits = find_relevant_code("some-repo", "redact secret values", max_results=3, allowed_roots=roots)
Passing allowed_roots=None disables the root check. That is meant for tests and trusted callers only. The MCP server always enforces roots.
Safety model
Repositories can contain untrusted files and instructions, so EasyPR is conservative by design.
| Risk | Protection |
|---|---|
| Running untrusted code | None of EasyPR's tools execute repository code or shell commands. The source contains no subprocess or process-spawning calls. |
| Reading unrelated files | Only directories you approve with --root can be inspected. Paths are resolved first, then checked, so .. tricks are rejected. |
| Symlink escapes | Symlinks are resolved before the root check, never followed while scanning, and files are opened without following links where the OS supports it. |
| Leaking secrets | Files such as .env, *.pem, id_rsa and credentials.* are never opened. Obvious secret values in returned text are redacted. |
| Prompt injection through repo text | Text copied from repository files is labelled untrusted, and the server instructs clients not to follow instructions found in it. EasyPR has no action-taking tools that injected text could trigger. |
| Resource exhaustion | Caps of 20,000 files scanned, 1 MB per file, 100 MB read per search, 25 results and 200-character snippets. |
| Misleading output | Findings are evidence-labelled, and setup commands are never marked verified. |
What this does not cover. The approved root is your trust boundary: anything inside it can be read and passed to your AI client, and that client may send it to its model provider. Secret redaction is pattern-based and best effort. Do not approve directories you would not want an AI assistant to read.
Status and roadmap
| Capability | Status |
|---|---|
inspect_repository |
✅ Working |
get_setup_guide |
✅ Working |
find_relevant_code (keyword search) |
✅ Working |
| Automated tests and CI | ✅ Working |
run_project_checks |
🗓️ Planned. Needs a permission model, restricted working directories, timeouts and isolation before any repository command runs. |
| Pull request description helper | 🗓️ Planned |
| Smarter retrieval (symbol index, embeddings) | 🗓️ Only if keyword search proves insufficient |
FAQ
Is EasyPR a chatbot? No. It is a tool server. Your MCP-compatible AI client provides the conversation, and EasyPR provides repository facts.
Does it run my project or its tests?
No. It never executes repository code. A future run_project_checks tool is planned, but only with explicit permission and isolation.
Does it read GitHub issues?
Not yet. Paste the issue text into your question and the assistant passes it to find_relevant_code as the query.
Does my code leave my machine? EasyPR's own code makes no network requests. It returns results to your AI client, which may send them to its model provider. Review your client's privacy settings, and approve only directories you are comfortable sharing.
Why does it need --root?
So you decide exactly what it may look at. Without an approved root the server will not start.
How accurate is find_relevant_code?
It is plain keyword matching, so treat results as leads. Short words can match inside longer ones (user matches username), and it does not understand meaning.
Which languages does it support? Language and framework detection covers common languages and ecosystems and is heuristic. Search works on any text file.
Troubleshooting
easypr: error: no approved rootmeans you did not pass--rootor setEASYPR_ALLOWED_ROOT.Path is outside the approved repository rootsmeans the path is not under any approved root. Check the roots listed in the message.- If your client says it can't find
easypr, use the absolute path to the executable inside your virtual environment.
Project layout
EasyPR/
├── src/easypr/
│ ├── repository.py # core logic: plain Python, no MCP imports
│ ├── server.py # thin MCP layer and command-line entry point
│ └── __init__.py
├── tests/ # pytest suite using temporary directories only
├── .github/workflows/ # CI (Python 3.10 to 3.13)
├── pyproject.toml
└── LICENSE
Contributing
Contributions are welcome, and this project aims to be friendly to first-time contributors.
git clone https://github.com/Ankith34/EasyPR.git
cd EasyPR
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest
Before opening a pull request:
- Open an issue first for anything larger than a small fix, so we can agree on the approach.
- Add or update a test with every behaviour change. Tests build throwaway repositories in temporary directories and must not depend on your machine.
- Keep
repository.pyindependent of MCP, and keepserver.pythin. - Never weaken a safety check without discussing it in an issue.
- Make sure
pytestpasses.
Disclaimer
EasyPR is alpha software provided as is. Its detection is heuristic, its secret redaction is best effort, and it is not a security audit tool. Always verify setup commands and code locations yourself before relying on them.
License
Released under the MIT License. Copyright (c) 2026 Ankith.
EasyPR MCP 질문
EasyPR MCP는 어떤 도구를 제공하나요?
3개 도구를 제공합니다. 예: inspect_repository, get_setup_guide, find_relevant_code.
EasyPR가 챗봇인가요?
아니요, 도구 서버입니다. MCP 호환 AI 클라이언트가 대화를 담당하고, EasyPR는 저장소에 대한 사실 정보를 제공합니다.
프로젝트나 테스트를 실행하나요?
아니요, 저장소 코드를 절대 실행하지 않습니다. 프로젝트 체크를 위한 도구는 향후 계획 중이나, 이를 위해서는 명시적인 권한 부여와 격리 환경이 필요합니다.
GitHub 이슈를 읽을 수 있나요?
현재는 지원하지 않습니다. 어시스턴트가 find_relevant_code 도구에 전달할 수 있도록 이슈 텍스트를 질문에 직접 붙여넣어 주세요.
왜 --root 인자가 필요한가요?
--root 인자를 통해 서버가 검사할 수 있는 디렉토리를 정확히 지정할 수 있습니다. 승인된 root 디렉토리 없이는 서버가 시작되지 않습니다.