AI-agent-first local MCP and Chrome Extension bridge for controlling free Overleaf projects from Codex, Claude, and MCP-capable agents without Premium Git sync.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 45 tools · 0 res
· 0 prompts
permission surface via README inference
tools
-
apply_patch_to_file
-
clear_project_alias
-
compile_and_read_log
-
execute_comment_action
-
execute_file_operation
-
execute_mirror_sync_plan
-
export_artifact_inventory
-
export_compile_log
-
export_current_file
-
export_visible_artifact
-
find_in_project_mirror
-
get_current_project
-
get_editor_diagnostics
-
get_recent_patch_log
-
get_section_content
-
get_sections
-
get_selection
-
health_check
-
insert_text
-
inspect_download_workflow
-
inspect_file_operation_ui
-
inspect_upload_workflow
-
inspect_visible_comments
-
list_open_project_files
-
list_project_aliases
-
list_target_locks
-
list_visible_artifacts
-
lock_target_project
-
open_file
-
paper_context
-
prepare_comment_action
-
prepare_file_operation
-
prepare_mirror_sync_plan
-
preview_mirror_diff
-
read_current_file
-
read_file
-
read_file_range
-
read_file_since_hash
-
replace_file
-
replace_section
-
replace_selection
-
restore_from_snapshot
-
set_project_alias
-
sync_project_snapshot
-
unlock_target_project
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit ab33c91 · analyzer v33 · 1d ago
skills & prompt files 1
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 39
filesystem 32
- fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/call-tool.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/doctor.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/first-run-check.js :5
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/generate-mcp-config.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-artifact-inventory-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-comments-inspection-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-context-budget-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-download-workflow-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-export-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-file-operation-ui-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-mirror-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-noop-release-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-prepare-comment-action-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-prepare-file-operation-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-safe-suite.js :5
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-section-noop-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-smoke-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-target-lock-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-upload-workflow-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-visible-artifact-export-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-write-restore-test.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/mirror-sync-workflow.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/package-npm-check.js :5
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/post-install-live-check.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/prepare-extension-build.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/prepare-release-assets.js :6
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/release-candidate-check.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/release-decision-report.js :4
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/release-preflight.js :5
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/repository-metadata-check.js :4
const fs = require("fs"); - fs AgentPilotLab-overleaf-browser-bridge-ab33c91/server/overleaf-bridge-mcp.js :5
const fs = require("fs"); - fs (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/tests/server.test.js :5
const fs = require("fs");
shell / exec 8
- shell AgentPilotLab-overleaf-browser-bridge-ab33c91/bin/overleaf-browser-bridge.js :5
const { spawnSync } = require("child_process"); - shell (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/first-run-check.js :4
const { execFileSync } = require("child_process"); - shell (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-safe-suite.js :4
const { execFileSync } = require("child_process"); - shell (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/package-npm-check.js :4
const { execFileSync } = require("child_process"); - shell (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/prepare-release-assets.js :4
const { execFileSync } = require("child_process"); - shell (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/release-candidate-check.js :198
const { execFileSync } = require("child_process"); - shell (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/release-preflight.js :4
const { execFileSync } = require("child_process"); - shell (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/tests/server.test.js :4
const { execFile, execFileSync } = require("child_process");
network 25
- net AgentPilotLab-overleaf-browser-bridge-ab33c91/extension/background.js :25
const response = await fetch(target.toString(), { - net AgentPilotLab-overleaf-browser-bridge-ab33c91/extension/contentScript.js :267
const response = await fetch(absoluteUrl.toString(), { - net AgentPilotLab-overleaf-browser-bridge-ab33c91/extension/popup.js :36
const response = await fetch(`${normalizeUrl(serverUrl.value)}/health`); - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/call-tool.js :18
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/first-run-check.js :156
const response = await fetch(`${info.serverUrl}/health`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-artifact-inventory-test.js :51
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-comments-inspection-test.js :66
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-context-budget-test.js :89
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-download-workflow-test.js :71
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-export-test.js :58
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-file-operation-ui-test.js :42
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-mirror-test.js :76
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-noop-release-test.js :136
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-prepare-comment-action-test.js :103
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-prepare-file-operation-test.js :53
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-section-noop-test.js :81
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-smoke-test.js :44
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-target-lock-test.js :68
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-upload-workflow-test.js :65
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-visible-artifact-export-test.js :90
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/live-write-restore-test.js :140
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/mirror-sync-workflow.js :165
const response = await fetch(`${info.serverUrl}/tools/call`, { - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/scripts/post-install-live-check.js :136
const response = await fetch(`${info.serverUrl}/tools/call`, { - net AgentPilotLab-overleaf-browser-bridge-ab33c91/server/overleaf-bridge-mcp.js :6
const http = require("http"); - net (weak) AgentPilotLab-overleaf-browser-bridge-ab33c91/tests/server.test.js :6
const http = require("http");
secrets 1
- secrets AgentPilotLab-overleaf-browser-bridge-ab33c91/server/overleaf-bridge-mcp.js :644
const token = String(options.token || process.env.OVERLEAF_BRIDGE_TOKEN || ensureRuntimeToken());