
Security News
GitHub to Block pull_request_target Workflows by Default Starting December 2
GitHub is tightening GitHub Actions security with new restrictions on privileged pull request workflows. Here's what changes and how maintainers are affected.
openstem-mcp
Advanced tools
English: README.en.md
이공계 공부를 돕는 MCP 서버. 이미 쓰고 있는 AI(Claude 등)에 붙이면 학술 그림을 그리고, 풀이를 검산하고, 강의 자료(PDF·한글 파일)를 읽어 예상문제·슬라이드·암기 카드·실험 보고서를 만들 수 있다. 서버는 AI를 따로 부르지 않고 그리기·계산만 하므로 추가 구독이나 API 키가 필요 없다. 모든 작업은 내 PC에서 돈다(단, LaTeX 패키지는 처음 쓸 때 tectonic 번들 서버에서 받아 온다. 문서 내용은 보내지 않는다. → PRIVACY.md).
Your AI. Your Tools. Your Freedom. 배움은 열려 있어야 한다. 쓰고 싶은 AI 모델과 필요한 도구 사이에서 하나를 고르지 않아도 되게 만든다. → OpenSTEM 선언문
회로도 (render_tikz) | 함수 그래프 (plot_function) | 분자 구조식 (render_molecule) |
|---|---|---|
![]() | ![]() | ![]() |
치트시트 (export_document) | 검산 (verify_math) |
|---|---|
![]() | "$\sin^2 x = \frac{1-\cos 2x}{2}$ 맞아?" → matches: true"$(x+1)^2 = x^2+1$?" → matches: false, 반례 $x=-2.03$"$\int x e^x dx$" → $(x-1)e^x$ |
openstem-<버전>.mcpb 파일을 내려받는다.처음 켤 때 파이썬 패키지, LaTeX 엔진(tectonic), TeX 패키지(합쳐 약 500 MB)를 내려받느라 몇 분 걸린다. 그동안 그림·PDF 툴은 "준비 중"이라고 답하니 잠시 뒤 다시 시키면 된다.
Claude Code에서 아래 한 줄이면 서버와 함께 사용 지침(스킬 6개: 풀이 검산, 그림, 시험 대비, 실험 보고서, 발표·문서, 학교 LMS)이 설치된다. 켤 때 결과물 폴더·자료 폴더·학교 LMS 설정을 물어본다(모두 선택).
/plugin install openstem --marketplace kimi94279-glitch/openstem-mcp
1. uv 설치 — 파이썬 프로그램을 내려받아 실행해 주는 도구다.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"curl -LsSf https://astral.sh/uv/install.sh | sh2. 미리 준비(선택) — 그림·PDF를 만드는 LaTeX 엔진(tectonic)은 처음 켤 때 서버가 공식 릴리스를 받아 해시를 확인한 뒤 설치한다. 터미널에서 한 번 실행해 두면 AI 앱에서 처음 쓸 때 기다리지 않는다(처음 한 번만, 약 300 MB, 3~5분):
uvx openstem-mcp --warmup
자동 설치를 원하지 않으면 환경변수 OPENSTEM_NO_DOWNLOAD=1을 두고 tectonic을 직접 설치한다: Windows는 tectonic 릴리스의 x86_64-pc-windows-msvc.zip에서 tectonic.exe를 PATH 폴더에, macOS는 brew install tectonic, Linux는 curl --proto '=https' --tlsv1.2 -fsSL https://drop-sh.fullyjustified.net | sh 후 mv tectonic ~/.local/bin/.
3. AI 앱에 연결
Claude Desktop: 앱을 완전히 종료한 뒤(트레이 아이콘 → 종료) 설정 파일 claude_desktop_config.json에 아래를 넣고 다시 켠다.
(Windows %APPDATA%\Claude\, macOS ~/Library/Application Support/Claude/. 앱이 켜진 채로 고치면 앱이 덮어쓴다.)
{
"mcpServers": {
"openstem": { "command": "uvx", "args": ["openstem-mcp"] }
}
}
Claude Code:
uvx openstem-mcp --warmup # 먼저 터미널에서 한 번(패키지 설치 + tectonic·TeX 준비)
claude mcp add openstem -- uvx openstem-mcp
첫 uvx openstem-mcp는 파이썬 패키지(약 200 MB)를 설치하느라 Claude Code의 서버 시작 제한(기본 30초)을 넘겨 연결이 실패할 수 있다. 위처럼 터미널에서 --warmup을 먼저 하거나, 제한을 늘려 띄운다(예: MCP_TIMEOUT=120000 claude, 밀리초).
설정을 더 하고 싶으면(선택) 같은 자리에 env와 args를 넣는다. 예: 결과물 폴더 바꾸기, tectonic 위치 지정, LaTeX 입력 검산 켜기.
{
"mcpServers": {
"openstem": {
"command": "uvx",
"args": ["--from", "openstem-mcp[latex]", "openstem-mcp"],
"env": {
"OPENSTEM_OUTPUT_DIR": "D:\\공부\\그림",
"OPENSTEM_TECTONIC": "C:\\Users\\<이름>\\.local\\bin\\tectonic.exe"
}
}
}
}
macOS에서 앱이 uvx나 tectonic을 못 찾으면(앱은 터미널과 PATH가 다를 수 있다) 터미널에서 which uvx, which tectonic으로 나온 전체 경로를 command와 OPENSTEM_TECTONIC에 넣는다.
ChatGPT는 인터넷의 HTTPS 주소로만 MCP 서버에 붙는다. 그래서 내 PC에서 서버를 HTTP 모드로 켜고, cloudflared로 임시 HTTPS 주소를 연다.
확인하지 못한 것(2026년 11월)
- 사용자 지정 MCP 서버는 OpenAI 도움말 기준 Business·Enterprise·Edu 요금제(웹) 에서 쓸 수 있다. Plus 등 개인 요금제에서 되는지는 확인하지 못했다. 요금제에 따라 메뉴가 없거나 읽기 툴만 될 수 있다.
- 툴 결과에 붙인 그림 미리보기(PNG)가 ChatGPT 모델에 실제로 전달되는지 확인하지 못했다. 그림 파일은 이 PC의 결과물 폴더에 저장되니 거기서 연다.
- 실제 ChatGPT·cloudflared 연결 시험도 아직이다.
winget install --id Cloudflare.cloudflared, macOS brew install cloudflared, Linux는 Cloudflare 문서의 패키지 설치 안내uvx openstem-mcp --http --tunnel → 터미널에 ChatGPT 커넥터 URL: https://….trycloudflare.com/<비밀 키>/mcp가 나온다--new-secret으로 바꾼다.uvx openstem-mcp --http → http://127.0.0.1:8765/<비밀 키>/mcp(또는 /mcp에 헤더 Authorization: Bearer <키>). 포트는 --port로 바꾼다.AI에게 평소처럼 말하면 된다.
결과물은 ~/OpenSTEM/(Windows는 C:\Users\<이름>\OpenSTEM\)에 쌓인다. 다른 곳에 두려면 환경변수 OPENSTEM_OUTPUT_DIR을 설정한다.
자료 폴더: 강의 자료·기출문제·공지(PDF, 한글 HWP·HWPX, 워드, 파워포인트, 엑셀)를 ~/OpenSTEM/자료/에 넣어 두면 AI가 이름으로 골라 읽는다. 이 폴더(와 결과물 폴더) 밖 파일은 열지 않는다. 다른 곳을 쓰려면 환경변수 OPENSTEM_INPUT_DIR을 설정한다. 사진이나 몇 개 안 되는 파일은 채팅에 바로 첨부해도 된다.
AI 앱의 프롬프트 메뉴에서 바로 고를 수도 있다.
| 프롬프트 | 하는 일 |
|---|---|
figure | 비슷한 예제를 찾아 고쳐 그리고, 미리보기를 보고 최대 3번 고친다 |
solve | 단계별로 풀고 핵심 단계마다 검산(단위 포함)한 뒤 최종 답을 낸다 |
exam | 강의 자료·기출로 새 예상문제를 만들고, 답을 검산해 문제지·해설지 PDF로 낸다 |
cheatsheet | 자료를 A4 한 장으로 요약해 PDF로 내보낸다 |
slides | 자료로 발표 슬라이드(pptx)를 만든다. 그림·수식·발표자 노트 포함 |
flashcards | 정의·공식 암기 카드를 오려 쓰는 PDF와 암기 앱용 파일로 만든다 |
lab_report | 측정 데이터로 그래프·맞춤·단위 검사를 하고 실험 보고서(docx)를 쓴다 |
과목·다가오는 마감·공지·강의 자료를 AI가 읽어 온다. 자료 파일은 자료 폴더의 LMS/과목명/으로 받아 바로 읽는다. "일반물리 자료 다 받아 줘"라고 하면 과목 자료를 한 번에 받고, 다음부터는 새로 올라오거나 바뀐 파일만 받는다. 제출·글쓰기는 하지 않고, 비밀번호는 받지 않는다.
1. 학교 이름 넣기 — 확장 설정의 학교 이름에 학교 이름만 넣으면 LMS 주소는 자동으로 찾는다. 줄임말도 된다(성대, 서울대, KAIST, 코리아텍). Claude Code나 설정 파일로 쓸 때는 환경변수 OPENSTEM_LMS_SCHOOL을 쓴다.
claude mcp add openstem -e OPENSTEM_LMS_SCHOOL=성균관대 -e OPENSTEM_LMS_TOKEN=<토큰> -- uvx openstem-mcp
AI에게 "LMS 지원 학교 목록 보여 줘"라고 하면 목록과 학교별 연결 방법을 알려 준다.
2. 토큰 만들기 (LMS 웹사이트에서 직접)
| LMS | 메뉴 |
|---|---|
| Canvas·LearningX | 계정 → 설정 → 승인된 통합 → + 새 액세스 토큰 |
| Moodle·Coursemos | 환경설정 → 보안 키 → 모바일 웹 서비스 키 복사 (메뉴가 안 보이면 <LMS 주소>/user/managetoken.php) |
만든 토큰을 확장 설정의 LMS 액세스 토큰(또는 OPENSTEM_LMS_TOKEN)에 넣고 앱을 다시 켠다. 토큰은 학교 LMS 주소로만 보낸다.
3. 토큰을 만들 수 없을 때: 캘린더 주소 (마감만) — 학교가 학생 토큰을 막았거나 모바일 서비스가 꺼져 있으면(연세대 LearnUs, 동국대, 한국기술교육대) LMS 캘린더의 구독 주소로 과제 마감만 읽을 수 있다.
| LMS | 메뉴 |
|---|---|
| Canvas·LearningX | 캘린더 → 오른쪽 캘린더 피드 → 주소 복사 (…/feeds/calendars/user_….ics) |
| Moodle·Coursemos | 달력 → 일정 내보내기 → 모든 일정, 최근과 다가오는 일정 → 캘린더 URL 가져오기 → 주소 복사 (…/calendar/export_execute.php?…) |
주소를 확장 설정의 LMS 캘린더 주소(또는 OPENSTEM_LMS_CALENDAR_URL)에 넣는다. 이 주소만 있으면 누구나 내 일정을 볼 수 있으니 비밀번호처럼 다룬다(도구도 결과에 싣지 않는다). 토큰과 캘린더 주소를 둘 다 넣으면 토큰을 먼저 쓰고 캘린더에만 있는 일정을 덧붙인다.
연결 시험 대상 (2026년 11월, 공개 페이지 조사)
실제 학교 LMS로 확인한 곳: 아직 없음(고려대 확인 예정). 아래 표는 각 학교 공개 페이지로 LMS 종류를 조사해 주소를 넣어 둔 목록이고, 기능은 가짜 서버(
tests/fake_lms.py)로만 시험했다. 내 학교에서 되는지(또는 안 되는지) 학교 LMS 확인 보고로 알려 주면 "확인한 곳"으로 옮긴다.
| 구분 | 학교 |
|---|---|
| LearningX(Canvas) 11곳 | 서울대, 고려대, 성균관대, 한양대, 중앙대, 경희대, 숭실대, 경북대, 경상국립대, 제주대, 단국대 |
| Coursemos·Moodle 22곳 | 연세대*, 서울시립대, 이화여대, 동국대*, 홍익대, 국민대, 세종대, 인하대, 숙명여대, 상명대, KAIST, POSTECH, GIST, 한국기술교육대*, 부산대, 전남대, 전북대, 충북대, 강원대, 인천대, 한국항공대, 울산대 의과대학 |
| 지원 안 됨 | ILOS: 서강대, 한국외대, 건국대, 명지대, 가톨릭대, 서울과기대, 한국공학대, 부경대, 영남대 · Blackboard: 아주대, UNIST, DGIST · 자체·기타: 광운대(KLAS), 충남대(권역 플랫폼), 울산대(uclass), 계명대 |
* 모바일 서비스가 꺼져 있어 토큰 대신 캘린더 주소를 쓴다.
OPENSTEM_LMS_URL)과 토큰으로 쓸 수 있다.| 툴 | 하는 일 |
|---|---|
render_tikz | TikZ·circuitikz·pgfplots·chemfig 코드 → SVG·PDF·PNG. 한글 라벨 자동 지원. 에러는 몇 번째 줄인지 알려준다 |
get_template | 검증된 그림 예제 40개(회로·물리·수학·다이어그램 각 10). MCP 리소스 template://{category}/{name}로도 열린다 |
plot_function | 수식 그래프. 점근선·불연속(점프)·정의역 밖 구간을 찾아 알려주고 데이터 점을 겹쳐 찍는다 |
plot_data | 측정 데이터 그래프. 표·CSV를 붙여 넣으면 오차 막대, 직선·다항·지수·거듭제곱·로그 맞춤(± 표준오차, R²), 튀는 점 표시 |
render_molecule | SMILES → 분자 구조식·반응식, 분자식·분자량 |
verify_math | 같은 식인지 판정(반례·수치 비교), 간단히 하기, 방정식, 미분, 적분, 극한, 값 계산, 미분방정식, 행렬, 라플라스 변환, 급수, 부등식, 확률분포 |
check_units | 답의 단위·차원 검사(어느 차원이 어긋났는지 설명), 단위 변환 |
read_document | 자료 폴더의 PDF·한글(HWP·HWPX)·워드·파워포인트·엑셀·텍스트·그림 읽기. 스캔본 PDF는 쪽 그림으로. 기출은 문제 단위로 나눠 한 문제의 글과 그림(PDF에서 잘라 냄)만 읽을 수 있다 |
export_document | 마크다운(수식·그림·표) → pdf·docx·pptx·한글(hwpx). 배치: 보통 문서, A4 치트시트, 시험지(해설 분리), 플래시카드. 참고문헌 파일(.bib 등)로 [@key] 인용과 참고문헌 목록(APA·IEEE·MLA·Chicago), docx·pptx 기본 서식(맑은 고딕, 16:9) 또는 내 양식 |
lms | 학교 LMS(LearningX·Canvas, Coursemos·Moodle) 읽기: 과목, 마감(토큰 없이 캘린더 주소로도), 공지, 자료 목록, 자료 파일 받기, 과목 자료 한 번에 받기(새로 올라오거나 바뀐 것만, 자료 폴더로), 지원 학교 목록 |
uvx openstem-mcp --doctor를 실행하면 tectonic·TeX 준비·네트워크·폴더 권한·계산 작업자를 점검하고, 끝에 이슈에 붙여 넣을 요약(홈 폴더·비밀 값은 가린 것)을 출력한다. 네트워크 점검을 빼려면 --offline, JSON은 --json..mcpb를 받아 다시 설치한다(설정은 남는다). uvx로 쓰는 경우: AI 앱을 완전히 끄고 uv cache clean openstem-mcp를 실행한 뒤 다시 켜면 최신판을 받는다. 버전은 uvx openstem-mcp --version으로 확인한다.openstem 항목을 지운 뒤, uv cache clean openstem-mcp와 아래 폴더를 지운다. 결과물 폴더(기본 ~/OpenSTEM)는 사용자 파일이라 직접 판단한다.
%LOCALAPPDATA%\openstem·%LOCALAPPDATA%\TectonicProject, macOS ~/Library/Caches/openstem·~/Library/Caches/TectonicProject.Tectonic, Linux ~/.cache/openstem·~/.cache/tectonic(예전 tectonic은 Tectonic)http-secret)가 든 설정 폴더: Windows %APPDATA%\openstem, macOS ~/Library/Application Support/openstem, Linux ~/.config/openstem--warmup을 미리 해 두면 생기지 않는다.OPENSTEM_TECTONIC에 실행 파일 경로를 넣는다.verify_math의 latex=true는 선택 기능이다. 위 설정 예시처럼 openstem-mcp[latex]로 실행하면 켜진다. 없어도 AI가 sympy 문법으로 바꿔 보낸다.√(m²v²) = mv 같은 변형이 틀린 게 맞다. 물리량은 AI가 assume="positive"로 검산하게 되어 있다.만든 사람은 서버를 운영하지 않고 어떤 데이터도 모으지 않는다(분석·추적 없음). 네트워크 연결은 설치(PyPI), tectonic 자동 설치(공식 GitHub 릴리스, 해시 확인), TeX 패키지(tectonic 서버), 설정한 경우 학교 LMS뿐이다. 자세한 내용: PRIVACY.md
uv sync --all-extras
uv run openstem-mcp --warmup
uv run pytest
npx @modelcontextprotocol/inspector uv run openstem-mcp
Claude Desktop에 개발 버전을 붙이려면(Windows): Claude Desktop을 완전히 종료 → python scripts/register_claude_desktop.py → 다시 켜기.
| 문서 | 내용 |
|---|---|
| CONTRIBUTING.md | 개발 환경, 시험, 기여 규칙 |
| docs/ARCHITECTURE.md | 구조와 설계 원칙 |
| docs/tools.md | 툴·프롬프트·리소스 명세 |
| docs/lms.md | 학교 LMS 연결 |
| docs/packaging.md | 배포·릴리스·설치 묶음 |
| docs/companions.md | 함께 쓸 도구(논문 검색·문서 편집·HWP 쓰기), 다른 호스트에서 스킬 쓰기 |
| docs/decisions/ | 설계 결정 기록 |
| SECURITY.md | 보안 범위·한계·취약점 알리기 |
| CHANGELOG.md | 변경 이력 |
MIT
FAQs
이공계 학습용 MCP 서버: 학술 그림 렌더링, 풀이 검산, 문서 내보내기
The pypi package openstem-mcp receives a total of 579 weekly downloads. As such, openstem-mcp popularity was classified as not popular.
We found that openstem-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
GitHub is tightening GitHub Actions security with new restrictions on privileged pull request workflows. Here's what changes and how maintainers are affected.

Security News
/Application Security
A practical guide to securing GitHub Actions against supply chain attacks, covering malicious pull requests, credential theft, dependency risks, and release pipelines.

Security News
Composer 2.11 adds dependency cooldowns, joining package managers that delay new releases to reduce supply chain risks while allowing urgent security updates.