소스 정보
- 저장소
- alondmnt/joplin-mcp
- 최근 소스 활동
- 2026년 5월 18일 01:14
- 감지된 SKILL.md 언어
- 영어
- 스타
- 161
- 포크
- 16
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/alondmnt/joplin-mcp --skill joplin명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | joplin |
| description | Orchestration guidance for Joplin note, notebook, and tag management tools |
| user-invocable | true |
This skill covers non-obvious tool interactions. Tool parameters are already in the tool schemas — don't restate them here.
If Joplin MCP tools (e.g., ping_joplin) aren't available, the server isn't connected. Follow these steps to configure it automatically:
Ask the user for their Joplin API token. Tell them where to find it:
Open Joplin Desktop → Tools → Options → Web Clipper → copy the Authorization token.
Write .mcp.json to the project root with the token. Use the Write tool to create the file:
{
"mcpServers": {
"joplin-mcp": {
"command": "uvx",
"args": ["--from", "joplin-mcp", "joplin-mcp-server"],
"env": {
"JOPLIN_TOKEN": "<paste_token_here>"
}
}
}
}
This file is already covered by .gitignore (.* rule) so it won't be committed.
Tell the user to restart Claude Code. The MCP server is loaded at startup, so a restart is required for the tools to appear.
After restart, call ping_joplin to verify the connection.
edit_note — find/replace, append, prepend. Use this for partial changes.update_note(body=...) — replaces the entire body. Only use when you intend to rewrite the whole note.If you need to change a paragraph, fix a typo, or append a section: always use edit_note.
get_note returns a table of contents (not content) when a note exceeds ~50 lines. To read the actual content:
get_note(note_id) — see the TOC and line countget_note(note_id, section="Section Name") — extract a specific sectionget_note(note_id, start_line=1, line_count=50) — sequential reading by line rangeget_note(note_id, force_full=True) — force full content (large context cost)| Parameter | Accepts |
|---|---|
note_id | 32-char hex ID only |
notebook_name | Human-readable name (e.g., "Work") |
tag_name | Human-readable name (e.g., "important") |
parent_id | Omit for top-level notebooks, or pass a 32-char hex parent notebook ID only |
Search results return IDs — use those IDs in subsequent calls.
tag_note fails if the tag doesn't exist. Before tagging multiple notes:
create_tag("my-tag") — create it first (idempotent if it already exists)tag_note(note_id, "my-tag") for each noteget_note(id) # see TOC + line count
get_note(id, section="Target") # read the section you need
edit_note(id, old_string="...", new_string="...") # surgical edit
create_notebook("Sub") # top-level notebook: omit parent_name
create_notebook("Sub", parent_name="Projects/Work") # under an existing notebook (by name or path)
create_note("Title", notebook_name="Sub", body="...")
create_tag("project-x") # ensure tag exists first
find_notes("project x") # get note IDs
tag_note(id1, "project-x") # tag each result
tag_note(id2, "project-x")
list_notebooks() # find target notebook ID
update_note(note_id, notebook_id="<target_hex_id>")