Browser Use
Browser agents and stealth cloud browsers for AI: run web tasks, fill forms, extract data.
제작자가 쓴 설명(영어 원문)
PLATO (Pusan National University LMS) MCP server via Moodle Web Service API + ubboard scraping
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
pnu_id, pnu_password비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
웹, 데스크톱, 모바일의 Claude에서 쓸 수 있어요:
https://plato-mcp.onrender.com/mcp터미널에서 이 명령어를 실행하세요
claude mcp add --transport http plato https://plato-mcp.onrender.com/mcp실행하기 전에 빈 값을 채워 주세요.
프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"plato": {
"url": "https://plato-mcp.onrender.com/mcp"
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"plato": {
"type": "http",
"url": "https://plato-mcp.onrender.com/mcp"
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요:
https://plato-mcp.onrender.com/mcp메뉴 이름은 요금제나 시기에 따라 조금 다를 수 있어요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
pnu_id 필수 HTTP headerpnu_password 비밀 필수 HTTP header이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
도구 이름과 설명은 서버가 2026년 11월 7일에 알려 준 그대로예요. 우리가 아니라 제작자가 쓴 글이고, 일반 텍스트로만 보여 드려요.
list_coursesList the courses the logged-in PLATO account is enrolled in.
get_course_contentsGet a course's weekly sections, modules, and file links.
list_assignmentsList assignments across one or more courses, with due dates.
get_assignment_detailGet one assignment's details and this account's submission status.
submit_assignmentSubmit text and/or file attachments for an assignment. IRREVERSIBLE once dry_run=False. Call with dry_run=True (default) first, show the preview to the user, and only call again with dry_run=False (same parameters) after they explicitly confirm. Provide text, file_paths/file_cont
remove_submissionWithdraw/clear this account's own submission for an assignment. IRREVERSIBLE and DESTRUCTIVE once dry_run=False -- this discards already-submitted work (files/text), not a draft. KNOWN ISSUE: live testing found dry_run=False currently fails with an "invalid parameter" error from
get_gradesGet this account's grade items for a course, if visible.
get_grades_access_infoCheck what grade-related permissions this account has in a course -- e.g. whether it can see its own grades vs. (as a teacher/TA) everyone's grades. Most student accounts will see canviewallgrades=False.
list_calendar_eventsList upcoming calendar events within the next `days_ahead` days.
get_calendar_access_infoCheck this account's calendar-management permissions -- a student account can typically manage its own personal entries only, not course/group entries.
create_calendar_eventCreate a personal calendar entry. IRREVERSIBLE once dry_run=False. Only personal ("user") events are supported -- course/group events are not something a student account can create. Call with dry_run=True (default) first, show the preview to the user, and only call again with dry
delete_calendar_eventDelete a personal calendar entry this account owns. IRREVERSIBLE once dry_run=False. Call with dry_run=True (default) first, show the preview to the user, and only call again with dry_run=False after they explicitly confirm.
get_unread_messagesGet this account's unread PLATO notifications.
get_unread_notification_countGet a count of this account's unread notifications (a cheaper check than get_unread_messages when you don't need the content). Note: PLATO has person-to-person messaging disabled site-wide, so this counts notifications only, not conversation messages.
list_noticesList announcements posted to a course's Notices board.
get_notice_detailGet the full text of one notice/announcement.
list_qnaList questions posted to a course's Q&A board.
get_qna_detailGet one Q&A question's text. Does not include replies -- see issue #23.
post_qna_questionPost a new question to a course's Q&A board. IRREVERSIBLE and VISIBLE to the instructor once dry_run=False (posted as private/secret by default). Call with dry_run=True (default) first, show the preview to the user, and only call again with dry_run=False after they explicitly con
download_course_fileDownload a course file (the `fileurl` from get_course_contents). Running locally (stdio, e.g. Claude Code/Desktop): saves the file to `save_path` on this machine and returns the saved path -- `save_path` is required in this case. Running as a remote/hosted server (streamable-http
get_course_completion_statusGet this account's overall course-completion status, if the course has course-level completion criteria configured. Most courses on this platform don't (available=False, with a message explaining why) -- try get_activity_completion_status for per-activity progress instead, or get
get_activity_completion_statusGet this account's completion status for every activity/module in a course -- richer than get_course_contents's per-module `completed` flag (includes tracking rules, e.g. 'must view' vs 'must spend N minutes'). For `vod` (video lecture) modules specifically, prefer get_course_con
get_upcoming_action_eventsGet Moodle's own "what needs action soon" feed -- assignments due, video lectures with a watch deadline, etc. -- sorted by urgency, from now onward. Unlike combining list_assignments + get_calendar_events, this is Moodle's own cross-activity prioritized view and may surface activ
get_courses_by_timelineList enrolled courses filtered by Moodle's own timeline classification (in-progress/future/past), based on course start/end dates. Unlike list_courses (which returns everything unfiltered), this answers "what am I actually taking right now" directly.
get_grades_overviewGet this account's overall grade for every enrolled course in one call. For the individual grade *items* within one course (e.g. each assignment's score), use get_grades instead -- this tool only returns one summary grade per course.
list_quizzesList quizzes across one or more courses.
get_quiz_attemptsGet this account's past attempts at one quiz.
get_quiz_best_gradeGet this account's best grade on one quiz, if any attempt has been graded.
get_quiz_access_informationCheck whether this account can currently attempt a quiz, and why not if blocked (e.g. time window, password, previous attempts exhausted). UNVERIFIED against a real quiz -- call this before start_quiz_attempt and sanity-check the result.
get_quiz_required_qtypesList the question types used in a quiz (e.g. 'multichoice', 'truefalse', 'essay') -- useful to know what kind of answers to expect before starting an attempt.
get_quiz_feedback_for_gradeGet the grade-boundary feedback text configured for a quiz at a given grade (e.g. 'You passed!' / 'Please review chapter 3').
get_quiz_combined_review_optionsCheck which review details (marks, feedback, right answers) this account is allowed to see for a quiz's attempts.
start_quiz_attemptStart a new attempt at a quiz. IRREVERSIBLE once dry_run=False -- consumes one of the quiz's limited attempts. UNVERIFIED against a real quiz -- call get_quiz_access_information first and check canattempt/preventaccessreasons. Call with dry_run=True (default) first, show the prev
get_quiz_attempt_dataGet the questions for one page of an in-progress quiz attempt. Each question's `html` is Moodle's own rendered question form -- parse it for the actual answer-field names before calling save_quiz_attempt_responses/process_quiz_attempt. UNVERIFIED against a real quiz.
get_quiz_attempt_summaryGet a summary of all questions in an attempt (answered/ unanswered), across all pages. UNVERIFIED against a real quiz.
get_quiz_attempt_reviewGet the grade and per-question review for a finished quiz attempt. UNVERIFIED against a real quiz.
save_quiz_attempt_responsesSave in-progress answers WITHOUT finishing the attempt -- can still be changed later. UNVERIFIED against a real quiz. Call with dry_run=True (default) first, show the preview to the user, and only call again with dry_run=False after they explicitly confirm.
process_quiz_attemptSubmit answers for a quiz attempt. IRREVERSIBLE once dry_run=False AND finish_attempt=True -- that is the final, graded submission and cannot be undone. UNVERIFIED against a real quiz. Call with dry_run=True (default) first, show the preview to the user -- especially before finis
list_forumsList standard Moodle forums across one or more courses. NOT the same as PLATO's notice/Q&A board (use list_notices/list_qna for that) -- this covers the separate, less-commonly-used mod_forum module.
get_forum_discussionsList discussion threads in one standard Moodle forum.
get_discussion_postsGet all posts in one forum discussion thread.
add_discussionStart a new discussion thread in a forum. IRREVERSIBLE once dry_run=False. Call with dry_run=True (default) first, show the preview to the user, and only call again with dry_run=False after they explicitly confirm.
add_discussion_postReply to a forum discussion thread. IRREVERSIBLE once dry_run=False. Call with dry_run=True (default) first, show the preview to the user, and only call again with dry_run=False after they explicitly confirm.
get_course_updates_sinceGet what changed in a course since a given time -- configuration, completion, grades, submissions, etc. Only reports modules that implement Moodle's change-tracking (confirmed: the standard `assign` module does; this platform's own custom lecture-file/board/video modules do not,
get_course_moduleResolve a single course module by its id directly, without fetching and filtering the whole course's contents.
search_coursesSearch PLATO's entire course catalog by name -- not limited to this account's enrolled courses (use list_courses for that).
get_recent_coursesGet this account's recently-accessed courses, most recent first.
get_recent_itemsGet this account's recently-accessed course modules (files, assignments, etc.) across all courses, most recent first.
get_starred_coursesGet this account's starred/favourited courses, if any.
list_video_conferencesList BigBlueButton video-conference activities across one or more courses. Joining a meeting is not supported by this server -- this tool is read-only coverage only. Zoom activities (mod_zoom) are not covered -- no real instance has existed to verify against.
list_lessonsList Lesson activities across one or more courses. Taking a lesson (answering pages) is not supported by this server -- this tool is read-only coverage only.
list_workshopsList Workshop (peer assessment) activities across one or more courses. Submitting or assessing work is not supported by this server -- this tool is read-only coverage only.
list_feedbacksList Feedback (survey) activities across one or more courses. Responding to a survey is not supported by this server -- this tool is read-only coverage only.
list_choicesList Choice (single-question poll) activities across one or more courses. Voting is not supported by this server -- this tool is read-only coverage only.
list_surveysList Survey activities across one or more courses. Answering is not supported by this server -- this tool is read-only coverage only.
list_scormsList SCORM packaged-content activities across one or more courses. Launching/tracking a SCORM attempt is not supported by this server -- this tool is read-only coverage only.
list_h5p_activitiesList H5P interactive-content activities across one or more courses. Attempt results are not supported by this server -- this tool is read-only coverage only.
list_glossariesList Glossary activities across one or more courses. Reading/ adding entries is not supported by this server -- this tool is read-only coverage only.
list_database_activitiesList Database ("mod_data") activities across one or more courses. Reading/adding entries is not supported by this server -- this tool is read-only coverage only.
list_wikisList Wiki activities across one or more courses. Reading/ editing pages is not supported by this server -- this tool is read-only coverage only.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 8일 점검
레지스트리 이름이 GitHub 계정 jin-1119 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
234ms 만에 응답(HTTP 200)
로그인 필요 없음
도구 설명 60개를 읽었고, AI에게 보내는 숨겨진 지시는 없었어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 3개 중 3개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
입력해야 할 값: pnu_id, pnu_password
제작자의 클라우드에서 실행돼요. 설치 없이 인터넷으로 연결하지만, 보내는 내용은 제작자의 서버를 거쳐요.
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.1.0)은 11일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. URL로 연결되기 때문에, 원격 MCP 서버를 지원하는 앱(예: 개발자 모드의 ChatGPT)에서도 쓸 수 있어요.
같은 카테고리에는: Browser Use, Chrome DevTools MCP, MCP Server Browser
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Browser agents and stealth cloud browsers for AI: run web tasks, fill forms, extract data.
MCP server for Chrome DevTools
MCP server for browser use access
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
🔗 [설치 가이드 페이지](https://jin-1119.github.io/plato-mcp/) — 학번/비밀번호만 입력하면 Claude.ai, Claude Code, Codex CLI용 연결 명령어를 바로 만들어 드립니다.
부산대학교(PNU)의 무들(Moodle) 기반 LMS인 PLATO(https://plato.pusan.ac.kr/)를 위한 비공식 MCP(Model Context Protocol) 서버입니다. Claude 같은 AI 어시스턴트가 여러분을 대신해 PLATO에 로그인하지 않고도, 여러분이 이미 접근 권한을 가진 강좌 자료·공지·과제·성적·Q&A를 조회·작성·다운로드할 수 있게 해 줍니다.
아직 개발 중입니다. 전체 구현 계획은
PLAN.md를, 현재 진행 상황은
Project 보드를 참고하세요.
이 서버는 새로운 권한을 부여하지 않습니다. 여러분의 PLATO 학번·비밀번호로 인증하며,
브라우저로 직접 열람할 때 볼 수 있는 것만 볼 수 있습니다 — 다만 그 내용이 AI와의 대화로
흘러 들어간다는 차이가 있습니다. 시작하기 전에 아래 면책조항과
개인정보 안내를 반드시 읽어 주세요.
이 프로젝트는 두 부류의 독자를 대상으로 합니다 — 그냥 써보고 싶은 일반 사용자와 코드를 고치거나 기여하고 싶은 개발자. 아래에서 본인에게 맞는 쪽을 고르세요.
코드를 내려받거나 서버를 직접 실행할 필요가 없습니다. 이 서버는 공식 MCP Registry에 io.github.jin-1119/plato-mcp로 등록되어 있고, 실제 주소는 https://plato-mcp.onrender.com/mcp(Streamable HTTP)입니다.
Smithery 마켓플레이스는 더 이상 쓰지 않습니다 — Smithery가 신규 외부 서버
등록을 막고 2026-10-31에 전체 서비스를 종료하면서, 공식 레지스트리로
옮겼습니다. 자세한 배경은
docs/smithery_deployment_model.md를
참고하세요.
https://plato-mcp.onrender.com/mcp 입력.claude mcp add --transport http plato-mcp https://plato-mcp.onrender.com/mcpio.github.jin-1119/plato-mcp로 찾아도 됩니다.pnu_id, pnu_password)로 입력합니다. 이 값은 서버 디스크에 저장되지 않으며, 요청을 처리하는 동안만 메모리에 존재합니다 — 자세한 내용은 SECURITY.md를 확인하세요.**시작하기 전에 반드시 아래 면책조항과
개인정보 안내를 읽어 주세요.** 특히 과제 제출·Q&A 등록처럼
되돌릴 수 없는 동작(✏️ 표시)은 실행 전 미리보기 확인을 거치도록 되어 있습니다.
직접 배포해 보고 싶다면
docs/smithery_publish_guide.md의
비전공자용 단계별 가이드를 참고하세요.
버그 수정, 새 도구 추가, 문서 개선 등 기여를 환영합니다. 이슈/브랜치/PR을 이 저장소가 실제로 어떻게 운영하는지는 CONTRIBUTING.md에 정리되어 있습니다 — PR을 보내기 전에 먼저 읽어 주세요. 로컬 개발 환경 설정은 바로 아래 개발 환경 설정 섹션을 참고하세요.
공식 Moodle webservice API로 동작하는 도구와, ubboard(공지/Q&A) HTML을 본인 세션으로 스크레이핑하는 도구로 나뉩니다. 쓰기 도구(✏️)는 실행 전 확인 절차를 거칩니다 (자세한 내용은 docs/write_confirmation_pattern.md). PLATO가 실제로 제공하는 439개 Moodle API 함수 전체를 이 MCP가 어떻게 다뤘는지(구현/중복/ 비활성화/권한없음/미구현 사유)는 docs/moodle_api_coverage.md 참고.
강좌 / 과제 / 성적 / 일정 / 쪽지 — 공식 API
list_courses — 수강 중인 강좌 목록get_course_contents — 강좌 콘텐츠(주차별 자료 등)get_course_updates_since — 강좌 변경사항 감지 (표준 Moodle 모듈만 — ubfile/ubboard/vod는 변경감지 콜백 미구현, 포함 안 됨)get_course_module — cmid로 모듈 직접 조회search_courses — PLATO 전체 강좌 카탈로그 검색 (수강 중인 강좌만이 아님)get_recent_courses — 최근 접속한 강좌 목록get_recent_items — 최근 열어본 강의자료/활동 목록 (강좌 단위가 아닌 모듈 단위)get_starred_courses — 즐겨찾기한 강좌 목록list_video_conferences — 화상강의(BigBlueButton) 조회 (참여 기능은 미지원, 실사용 사례 없는 forward-looking 기능)list_lessons — Lesson 활동 조회 (응시 기능은 미지원, 실사용 사례 없음)list_workshops — Workshop(상호평가) 활동 조회 (제출/평가 기능은 미지원, 실사용 사례 없음)list_feedbacks — Feedback(설문) 활동 조회 (응답 기능은 미지원, 실사용 사례 없음)list_choices / list_surveys — Choice(투표)/Survey 활동 조회 (응답 기능은 미지원, 실사용 사례 없음)list_scorms / list_h5p_activities — SCORM/H5P 패키지 콘텐츠 조회 (실행/추적 기능은 미지원, 실사용 사례 없음)list_glossaries — Glossary(용어집) 조회 (항목 읽기/쓰기는 미지원, 실사용 사례 없음)list_database_activities — Database 활동 조회 (항목 읽기/쓰기는 미지원, 실사용 사례 없음)list_wikis / list_chats — Wiki/실시간 채팅 활동 조회 (읽기/쓰기는 미지원, 실사용 사례 없음)get_user_profile — 사용자 프로필 조회 (같은 강좌 수강생만, 전체 검색 아님)get_private_files_info / add_private_file ✏️ — 개인파일 영역 조회/업로드 (⚠️ 삭제 도구 없음, 실제 삭제는 PLATO 웹에서)get_user_preferences — 사용자 환경설정 조회 (대부분 내부 UI 상태값)get_my_course_groups — 강좌 내 소속 그룹 조회get_enrolled_users — 강좌 수강생 명단 조회 (PLATO 참가자 목록과 동일 정보)list_assignments — 과제 목록get_assignment_detail — 과제 상세submit_assignment ✏️ — 과제 제출remove_submission ✏️ — 과제 제출 철회 (⚠️ 실제 실행 경로는 아직 PLATO에서 invalidparameter 오류 발생, 미리보기만 동작 확인됨)get_grades — 성적 조회get_grades_access_info — 이 계정의 성적 조회 권한 확인 (전체 열람 권한 등)list_calendar_events — 캘린더 일정get_calendar_access_info — 캘린더 관리 권한 확인create_calendar_event / delete_calendar_event ✏️ — 개인 캘린더 일정 생성/삭제 (본인 소유 개인 일정만 가능, 강좌/그룹 일정은 불가)get_unread_messages / get_unread_notification_count — 안 읽은 쪽지 (⚠️ PLATO는 1:1 메시징/대화 기능이 사이트 전체에서 비활성화되어 있음 — 알림만 동작)get_course_completion_status — 강좌 단위 이수 현황 (이수 기준이 설정된 강좌만)get_activity_completion_status — 강좌 내 활동/자료별 이수 현황 (동영상 강의 시청률 포함)get_upcoming_action_events — 마감 임박한 할 일(과제/시청 기한 등) 통합 조회get_courses_by_timeline — 진행 중/예정/종료 강좌 필터링get_grades_overview — 전체 강좌 종합 성적 한 번에 조회list_quizzes / get_quiz_attempts / get_quiz_best_grade — 퀴즈 조회get_quiz_access_information / get_quiz_required_qtypes / get_quiz_feedback_for_grade / get_quiz_combined_review_options — 퀴즈 응시 전 확인용 조회 (⚠️ 응답 형태 미검증 — 실제 퀴즈가 있는 강좌가 없어서 파라미터만 라이브로 확인됨)start_quiz_attempt / get_quiz_attempt_data / save_quiz_attempt_responses / process_quiz_attempt / get_quiz_attempt_summary / get_quiz_attempt_review ✏️ — 퀴즈 응시 흐름 (⚠️ 전체 미검증, 실제 퀴즈로 끝까지 테스트된 적 없음 — 사용 전 반드시 재검증 권장)list_forums / get_forum_discussions / get_discussion_posts — 표준 Moodle 포럼 조회 (PLATO 자체 공지/Q&A인 ubboard와는 다른 모듈)add_discussion / add_discussion_post ✏️ — 포럼 글쓰기/답글공지사항 / Q&A(`ubboard`) — 로그인 세션 스크레이핑
list_notices — 공지사항 목록get_notice_detail — 공지사항 상세list_qna — Q&A 게시글 목록get_qna_detail — Q&A 게시글 상세post_qna_question ✏️ — Q&A 질문 등록파일
download_course_file — 강좌 첨부파일 다운로드 (원격 실행 시 링크 반환, 위 개인정보 안내 참고)src/plato_mcp/
├── server.py # FastMCP 앱, tool 등록 진입점 ├── config.py # Smithery config 스키마 (pnu_id, pnu_password, ...) ├── auth.py # 세션별 wstoken + requests.Session 쿠키 in-memory 캐시 ├── moodle_client.py # webservice/rest/server.php 범용 REST 호출 래퍼 ├── ubboard/ │ ├── scraper.py # list_notices/get_notice_detail/list_qna/get_qna_detail │ ├── writer.py # post_qna_question (sesskey 처리) │ └── parser.py # BeautifulSoup 파싱 ├── files.py # download_course_file ├── tools/ # MCP tool 등록 (courses/assignments/grades/calendar/messages/notices_qna/downloads) ├── models.py # pydantic 응답 스키마 ├── errors.py # 타입 예외 (AuthError, MoodleAPIError, ScrapeError, RateLimitError) └── security.py # 로그/자격증명 마스킹, rate limiting
인증 흐름: 세션 시작 시 login/token.php로 wstoken을 발급받아 메모리에 캐시합니다. ubboard(공지/Q&A) 접근 시에만 추가로 쿠키 로그인을 수행해 sesskey를 스크레이핑합니다. 어떤 경우도 디스크에 저장하지 않습니다. 배경이 된 사전 조사는 PLATO_MCP_사전조사.md, 전체 로드맵은 PLAN.md를 참고하세요.
아래는 이 프로젝트의 코드를 수정/기여하려는 개발자용 명령어입니다. PLATO를
그냥 써보고 싶은 일반 사용자는 몰라도 되는 내용이며, 실행해도 PLATO 계정에 연결되지
않습니다 — 코드와 테스트 도구(
pytest,ruff등)를 내 컴퓨터에 설치할 뿐입니다.
사전 요건
pip install -e ".[dev]"
pytest
ubboard)은 공식 API가 없어 로그인된 본인 세션으로 렌더링된 HTML을 직접 스크레이핑하는데, 이 사이트의 robots.txt는 Disallow: /를 명시하고 있습니다. 이 지침은 익명 크롤러를 겨냥한 것이며 인증된 사용자 본인의 열람 행위를 겨냥한 것은 아니지만, 그래도 스크레이핑인 것은 사실입니다. 이 서버를 계정에 연결하기 전에 본인 계정에 대한 PNU의 acceptable-use 정책에 부합하는지 확인할 책임은 사용자에게 있습니다. 권장 사용 방식은 개인적·저빈도 사용이며, 사이트 전체를 대상으로 한 자동 대량 스크레이핑은 권장하지 않습니다.SECURITY.md를 참고하세요.docs/security_audit.md, docs/abuse_prevention_review.md 참고) — 하지만 스스로 찾아 고친 것은 외부 감사와 같은 수준의 보증이 아닙니다.이 서버는 강좌 콘텐츠를 그대로 전달합니다 — Q&A 게시판의 경우 다른 학생들의 이름과 게시글도 포함됩니다. 이는 본인 계정이 PLATO를 통해 이미 정당하게 접근할 수 있는 내용이며, 이 도구가 새로운 접근 권한을 부여하는 것은 아닙니다. 브라우저로 PLATO를 직접 열람할 때와 다른 점은, 이 내용이 AI 어시스턴트와 나누는 대화의 일부가 된다는 것입니다. 즉 도구 출력으로서 해당 AI/LLM 제공업체(예: Anthropic)에 전송됩니다. 강좌 Q&A 게시판을 대상으로 폭넓은 질문을 하기 전에 이 점을 유념하세요.
전체 검토 내용과 알려진 미해결 사항(PLATO가 Q&A 게시글의 "비공개/강사 전용" 플래그를 서버 측에서 실제로 강제하는지 — 즉 이 도구가 그런 게시글을 애초에 볼 수 없는지 — 여부는 아직 실증적으로 검증되지 않았습니다)은 docs/pii_review.md에서 확인할 수 있습니다.
원격으로 실행할 경우 (로컬 Claude Code/Desktop이 아니라 Claude.ai 커넥터 등을 통해 실행하는 경우), 인라인 전송 크기 제한을 초과하는 큰 파일에 대해 download_course_file은 파일 자체가 아니라 다운로드 *링크*를 반환하며, 이 링크에는 살아있는 PLATO 액세스 토큰이 포함되어 있습니다. 이 토큰은 해당 파일 하나에만 한정되지 않습니다 — 실제로 확인해 본 결과 본인 계정에 대한 임의의 PLATO API 호출을 인증하는 데 사용할 수 있었습니다. 이 링크나 이 링크가 포함된 대화 기록을 공유하는 것은 파일 하나를 공유하는 것이 아니라 계정에 대한 활성 자격증명을 공유하는 것과 같습니다. 자세한 내용은 SECURITY.md와 docs/smithery_deployment_model.md를 참고하세요.
ruff check .PLAN.md를 참고하세요.CONTRIBUTING.md를 참고하세요.AGPL-3.0입니다. 이 서버(또는 수정본)를 네트워크 서비스로 돌려 다른 사람에게 제공하는 경우, AGPL에 따라 해당 소스코드도 함께 공개해야 합니다.