MCP server for Obsidian with semantic search, vector embeddings via pgvector, and Claude Code integration
Drift inferred · capture-to-capture
- HIGH code analysis flagged dynamic code execution in artificemachine/obsidian-semantic-mcp
transport stdio counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit dc232d7 · analyzer v28 · 1d ago
skills & prompt files 3
danger signals1
- dynamic code execution __import__() artificemachine-obsidian-semantic-mcp-dc232d7/tests/test_setup.py :50
__import__(import_name)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 29
filesystem 6
- fs artificemachine-obsidian-semantic-mcp-dc232d7/obsidian_semantic_mcp.py :12
from pathlib import Path - fs artificemachine-obsidian-semantic-mcp-dc232d7/osm_init.py :23
import shutil - fs artificemachine-obsidian-semantic-mcp-dc232d7/src/config.py :10
from pathlib import Path - fs artificemachine-obsidian-semantic-mcp-dc232d7/src/dashboard.py :22
from pathlib import Path - fs artificemachine-obsidian-semantic-mcp-dc232d7/src/launcher.py :24
from pathlib import Path - fs artificemachine-obsidian-semantic-mcp-dc232d7/src/server.py :45
from pathlib import Path
shell / exec 4
- shell artificemachine-obsidian-semantic-mcp-dc232d7/osm_init.py :24
import subprocess - shell artificemachine-obsidian-semantic-mcp-dc232d7/src/dashboard.py :18
import subprocess - shell artificemachine-obsidian-semantic-mcp-dc232d7/src/launcher.py :22
import subprocess - shell artificemachine-obsidian-semantic-mcp-dc232d7/src/server.py :1161
import subprocess
network 3
- net artificemachine-obsidian-semantic-mcp-dc232d7/osm_init.py :22
import requests - net artificemachine-obsidian-semantic-mcp-dc232d7/src/dashboard.py :23
from urllib.parse import urlparse, parse_qs - net artificemachine-obsidian-semantic-mcp-dc232d7/src/server.py :50
import requests
secrets 3
- secrets artificemachine-obsidian-semantic-mcp-dc232d7/osm_init.py :877
if env_token := os.environ.get("DASHBOARD_TOKEN"): - secrets artificemachine-obsidian-semantic-mcp-dc232d7/src/config.py :40
pw = os.environ.get("POSTGRES_PASSWORD", "") - secrets artificemachine-obsidian-semantic-mcp-dc232d7/src/launcher.py :60
if not os.environ.get("DATABASE_URL") and not os.environ.get("POSTGRES_PASSWORD"):
database 2
- db artificemachine-obsidian-semantic-mcp-dc232d7/src/migrations.py :35
from psycopg2 import sql - db artificemachine-obsidian-semantic-mcp-dc232d7/src/server.py :48
import psycopg2
declared dependencies 8
- mcp@==1.28.1
- psycopg2-binary@==2.9.12
- watchdog@==6.0.0
- requests@==2.34.2
- pyjwt@==2.13.0
- httpx@==0.28.1
- python-dotenv@==1.2.2
- pyyaml@==6.0.3