Jorge MM Marques
Transformo processos manuais frágeis em ferramentas Python/Playwright testadas e usadas em produção — com uma prática artística intermedia sobre a mesma stack.
https://jorgemarques.com/Connect straight to this server’s public endpoint.
https://mcp.jorgemarques.com/mcpWe add this server to your workspace, walk through sign-in once, then open Studio with tools ready to run.
Last probed Sep 14, 2026 · mcp.jorgemarques.com
20tools discovered
Session Start
Call ONCE at conversation start — never repeat in the same chat. Returns slim router (_README.router.md ~400 tok) + datetime (date, simplenote_folder, weekday) + presence summary from Context Hub (physical_device, work_surface, current_task, confidence) + fleet tailnet status (devices: local/online/offline from tailscale status --json) + recent durable memories and memory_receipt (exact injected keys or explicit backend error). Reuse response.datetime, response.presence and response.fleet — do N
Current Context
Refresh mid-conversation only — session_start already includes presence summary. Presença e contexto de trabalho do Jorge (Context Hub, payload completo). agent_runtime = infra onde o MCP corre (VPS); NÃO é presença. Usar presence.work_surface, presence.physical_device e current_task. Silencioso — nunca pedir ao Jorge para correr contextctl. Se presence.confidence < 0.6, usar melhor palpite e continuar; só perguntar se a acção depender criticamente do device (ex.: correr comando local destrutivo
List Folder
List files and subfolders in any vault folder. path='': vault root. stats=true: mtime/ctime/size. Non-recursive: all entry types with ext on files (.pdf, .py, …). recursive=true: all .md under path (capped ~200; use find_files for PDFs/binaries). Avoid recursive on 00_inbox — token-heavy.
Find Files
Discover vault files by name, extension, type, path, date, or size — metadata only, no content. Use for PDFs, docx, xlsx, code, media (.md included unless exclude_md=true). Max 100 results; requires at least one filter. After discovery, use run_skill to read (dre-parser, vault-find --brief, domain skills). Types: ebooks, docs, images, audio, video, code, data, archives.
Read Vault Images
Load image files from the vault as base64 data URIs for inline preview. Use after find_files when you need to SHOW photos (not just list paths). Max 6 images, 2 MB each. jpg/png/gif/webp/bmp/svg.
Read Note
Return note content by vault-relative path. Large notes are windowed by line offset/limit and capped at ~32000 chars. When truncated=true, continue with offset=next_offset. Token-heavy paths may include additive field warning (CHANGELOG, WhatsApp exports, oversized manifest entries, JSON/JSONL). Prefer read_frontmatter for YAML only; bulk_read for ≤20 paths.
Read Frontmatter
Return only the parsed YAML frontmatter of a note (no body). Use before run_skill to check has_learnings (~200 chars vs full read_note). Malformed YAML returns partial dict plus warning, not a hard error.
Bulk Read Notes
Read up to 20 notes in one round-trip (per-note body cap like read_note). Returns notes dict plus optional errors (batch does not abort on single failure). Honours _PRIVADO/ and vault-graph.json blocks.
Read JSON
Navigate structured .json files schema-first — never use read_note or file-reader on JSON. Workflow: mode=schema (default) to see shape/types/sizes cheaply, then mode=list to browse arrays/objects with pagination, then mode=get with query for the exact value. query syntax: dotted keys and brackets (e.g. conversations[0].messages[-1].content). get values capped at ~32000 chars. For vault-graph.json use run_skill('vault-graph', ['query', ...]) instead.
Read JSONL
Read .jsonl/.ndjson files line-by-line without loading the whole file. mode=schema infers shape from first lines; mode=rows (default) returns a paginated window. Use offset/next_offset to paginate. Never use read_note on JSONL.
Write Note
Write a vault note. mode controls behavior: 'upsert' (default) = create or overwrite; 'create' = fail if exists; 'update' = fail if not exists; 'append' = add to end of existing note.
Edit Note
Surgically replace an exact string in a note. Default: old_str must appear exactly expect_count times (default 1). replace_all=true replaces every occurrence. Saves ~90% tokens vs read_note + write_note for targeted changes.
Move Note
Move or rename a note within the vault.
Search Notes
LAST RESORT full-text search (case-insensitive AND). Max 30 paths per call; IPv4 queries rejected. Prefer: vault-dispatch (routing), vault-find (recent files), vault-graph (relations), vault-search skill (regex/acentos), activity-log (PC context). Never search vague terms or IPs.
Get Current Datetime
Mid-conversation ONLY — never at session bootstrap. session_start already returns the same datetime; reuse it instead of calling this. Use only if the chat is long and you need a fresh clock for hoje/ontem/esta semana. Returns date, time, weekday, ISO week, simplenote_folder (YYYY/MM).
Tasks
Manage operational tasks (backend Vikunja). Requires 'command' (see enum). ALWAYS ask Jorge before calling 'add' — agents suggest, never create autonomously. id accepts global integer OR 'projeto/indice' (e.g. 'infra/16'). commands: focus=list NOW tasks; list=all open tasks; add=create task (needs title); done/drop/waiting=change status (need id); move=change bucket (needs id+bucket); sweep=triage suggestions (read-only); update=edit fields (needs id); archive=month report (needs month YYYY-MM);
Vikunja (deprecated — use tasks)
DEPRECATED alias for `tasks`. Use tasks() instead. Manage operational tasks via Vikunja backend. Same commands as tasks tool.
Calendar
Manage CalDAV calendar events (Radicale at cal.jorgemarques.com). Requires 'command'. Timezone: Europe/Lisbon. Never invent times. calendars=list collections; list=events in range (needs from+to); add=create event (needs title+start); get/update/delete=by uid; import=batch from YAML/JSON file. calendar arg: castelform | pessoal | foco (projection, read-only for agents).
Run Skill
Execute a skill from 50_infra/skills/ (searched recursively by name; must have main.py). Site jorgemarques.com (obras, título, CV): run_skill('portfolio-api', ['patch-work', '<slug>', '--title', '...', '--apply']). Dry-run first: omit --apply. Never edit_note/browser for live portfolio content. vault-dispatch routes NEW vault notes — not portfolio API writes.
Approve Improvement Proposal
Approve or reject a pending agent-improvement proposal by signature. SSOT: pending-approvals.json. Use decision 'yes'/'approve' or 'no'/'reject'. Applied proposals are processed by agent-improvement --apply-approved cron.
Get your MCP into directories
A working endpoint is step one. Directory coverage is the coordinated launch across ChatGPT, Claude, Cursor, the MCP Registry, and community indexes.
Directory coverage for brandsTransformo processos manuais frágeis em ferramentas Python/Playwright testadas e usadas em produção — com uma prática artística intermedia sobre a mesma stack.
Use the MCP endpoint listed on this page in your MCP client configuration. One-click install pills support Claude, Cursor, VS Code, and other hosts. Copy the remote MCP URL if your client needs a manual entry.
MCPBundles probed 20 tools on the live server. The tool list on this page reflects what was discovered at the last refresh — connect your client to see the full set available to your session.
Obsidian may require signing in to the provider before tools can run. Connect through MCPBundles or your MCP client and complete any provider login when prompted.
Operate Obsidian? Verify ownership to take over this directory entry.
This server appears in the MCPBundles directory. Verify you operate it to take over the listing — name, description, logo, contact email, and skill content. We email a 6-digit code to a maintainer address your server publishes in /.well-known/security.txt or /.well-known/mcpbundles.json. Free, takes about a minute.