Open AI-native infrastructure for scientific knowledge — multi-persona MCP service + ingest pipeline, Apache 2.0
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport streamable-http · http
verified
reported
listed in the official MCP registry 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 c862311 · analyzer v17 · 3d ago
danger signals2
- over-broad OAuth scopehttps://www.googleapis.com/auth/cloud-platformOpenArx-AI-openarx-core-c862311/packages/api/src/model-router/vertex-llm.ts:95
scope: 'https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/generative-language', - over-broad OAuth scopehttps://www.googleapis.com/auth/cloud-platformOpenArx-AI-openarx-core-c862311/packages/embed-service/src/auth/service-account.ts:43
scope: 'https://www.googleapis.com/auth/cloud-platform',
evidence-backed
findings quoted directly from the published source artifact — not inferred
filesystem 37
- fs OpenArx-AI-openarx-core-c862311/packages/api/src/db/migrate.ts :1
import { readdir, readFile } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/vertex-llm.ts :18
import { readFileSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/cli/src/commands/ingest.ts :10
import { existsSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/embed-service/src/auth/service-account.ts :2
import { readFileSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/embed-service/src/server.ts :2
import { chmodSync, existsSync, unlinkSync, mkdirSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/enrichment/src/lib/enrich-document.ts :23
import { mkdir, writeFile } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/enrichment/src/lib/rate-limiter.ts :14
import { readFileSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/enrichment/src/runner/socket-server.ts :9
import { mkdir, unlink, chmod } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/adapters/arxiv-local.ts :8
import { readdir, readFile, access } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/doctor/checks/license-backfill.ts :21
import { readFile, writeFile, mkdir, access } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/lib/proxy-pool.ts :9
import { readFileSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/docling-client.ts :8
import { readFile } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/grobid-client.ts :8
import { readFile } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/latex-parser.ts :10
import { readFile, readdir, access } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/markdown-parser.ts :15
import { readFile } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/mathpix-parser.ts :10
import { readFile } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/parse-strategy.ts :11
import { access, mkdir, readdir, rm, stat } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/enricher/pwc-loader.ts :8
import { readFile } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/workers.ts :31
import { access, mkdir, writeFile } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/runner/RunnerService.ts :8
import { access } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/runner/RunnerSocket.ts :9
import { mkdir } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/batch-fetch-arxiv.ts :12
import { writeFile, mkdir, access } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/cleanup-orphans.ts :13
import { readdir, rm, stat } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/detect-parse-failures.ts :28
import { readdir, readFile, stat } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/download-pwc.ts :10
import { createWriteStream, mkdirSync, existsSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/download-samples.ts :11
import { writeFile, mkdir, access } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/migrate-storage.ts :12
import { readdir, stat, mkdir, rename } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/re-enrich.ts :28
import { existsSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/run-pipeline.ts :18
import { existsSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/validate-parsers.ts :15
import { readdir, readFile, writeFile, mkdir, access } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/ingest/src/sources/arxiv-source.ts :9
import { writeFile, mkdir, stat } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/internal-routes.ts :14
import { createReadStream, statSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/lib/legal-versions.ts :10
import { readFileSync } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/pub/archive-intake.ts :26
import { createWriteStream } from 'node:fs'; - fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/pub/publish-tools.ts :10
import { mkdir as fsMkdir, rm as fsRm, cp as fsCp } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/publish-document.ts :15
import { mkdir, writeFile, rename, rm, cp, access, realpath } from 'node:fs/promises'; - fs OpenArx-AI-openarx-core-c862311/packages/mcp/src/request-logger.ts :11
import { appendFile, mkdir } from 'node:fs/promises';
shell / exec 4
- shell OpenArx-AI-openarx-core-c862311/packages/ingest/src/lib/build-info.ts :6
import { execSync } from 'child_process'; - shell OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/parse-strategy.ts :13
import { execFile } from 'node:child_process'; - shell OpenArx-AI-openarx-core-c862311/packages/ingest/src/sources/arxiv-source.ts :16
import { execFile } from 'node:child_process'; - shell OpenArx-AI-openarx-core-c862311/packages/mcp/src/internal-routes.ts :18
import { execFile } from 'node:child_process';
network 43
- net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/embed-client.ts :108
const resp = await fetch(`${this.url}/embed`, { - net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/embedding-pool.ts :147
const resp = await fetch(`${server.url}/embed`, { - net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/openrouter-llm.ts :85
const resp = await fetch(OPENROUTER_URL, { - net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/reranker-client.ts :63
const resp = await fetch(`${this.nextUrl()}/health`); - net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/specter2-client.ts :46
const resp = await fetch(`${this.baseUrl}/health`); - net OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/vertex-llm.ts :105
const resp = await fetch('https://oauth2.googleapis.com/token', { - net OpenArx-AI-openarx-core-c862311/packages/cli/src/commands/enrichment.ts :10
import { createConnection } from 'node:net'; - net OpenArx-AI-openarx-core-c862311/packages/embed-service/src/auth/service-account.ts :51
const resp = await fetch('https://oauth2.googleapis.com/token', { - net OpenArx-AI-openarx-core-c862311/packages/embed-service/src/handlers/gemini-2-preview.ts :126
const resp = await fetch(this.vertexEndpoint!, { - net OpenArx-AI-openarx-core-c862311/packages/embed-service/src/handlers/specter2.ts :65
const resp = await fetch(`${this.baseUrl}/embed`, { - net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/lib/enrich-document.ts :148
const resp = await fetch(url, { - net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/runner/socket-server.ts :8
import { createServer, Server, Socket } from 'node:net'; - net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/sources/core.ts :97
const resp = await fetch(url, { - net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/sources/openalex.ts :98
const resp = await fetch(url, { - net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/sources/pmc.ts :47
const resp = await fetch(url, { - net OpenArx-AI-openarx-core-c862311/packages/enrichment/src/sources/unpaywall.ts :74
const resp = await fetch(url, { - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/adapters/arxiv-local.ts :37
async *fetch(options: FetchOptions): AsyncGenerator<RawDocument> { - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/lib/proxy-pool.ts :10
import { ProxyAgent } from 'undici'; - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/lib/s2-client.ts :35
const resp = await fetch(url, { headers }); - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/docling-client.ts :34
const resp = await fetch(`${baseUrl}/health`, { signal: AbortSignal.timeout(5000) }); - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/grobid-client.ts :58
const resp = await fetch(`${baseUrl}/api/isalive`, { signal: AbortSignal.timeout(5000) }); - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/mathpix-parser.ts :74
const submitResp = await fetch(`${API_BASE}/pdf`, { - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/enricher/github-verifier.ts :71
const response = await fetch(url, { - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/workers.ts :147
const resp = await fetch(pdfUrl, { signal: AbortSignal.timeout(60_000) }); - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/runner/RunnerSocket.ts :8
import { createServer, createConnection, Server, Socket } from 'node:net'; - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/batch-fetch-arxiv.ts :59
const resp = await fetch(url); - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/download-pwc.ts :41
const response = await fetch(PWC_URL); - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/download-samples.ts :92
const resp = await fetch(url); - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/migrate-embeddings.ts :156
const resp = await fetch(`${url}/embed`, { - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/register-papers.ts :29
for await (const raw of adapter.fetch({ mode: 'local', limit })) { - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/reindex-missing-specter2.ts :133
const resp = await fetch(`${cfg.embedUrl}/embed`, { - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/reindex-orphans.ts :118
const r = await fetch(`${cfg.embedUrl}/health`); - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/scan-qdrant-orphans.ts :70
const r = await fetch(`${cfg.qdrantUrl}/collections/${cfg.collection}`, { - net OpenArx-AI-openarx-core-c862311/packages/ingest/src/sources/arxiv-source.ts :118
resp = await fetch(url, { signal: fetchTimeout }); - net OpenArx-AI-openarx-core-c862311/packages/mcp/src/gov-identity.ts :28
const lookupResp = await fetch(`${GOV_URL}/agents/by-portal-user/${portalUserId}`, { - net OpenArx-AI-openarx-core-c862311/packages/mcp/src/index.ts :141
const upstream = await fetch(`${PORTAL_ISSUER}/.well-known/oauth-authorization-server`, { - net OpenArx-AI-openarx-core-c862311/packages/mcp/src/portal-auth.ts :60
const resp = await fetch(`${PORTAL_URL}/api/internal/verify-token`, { - net OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/gov/tools.ts :26
const resp = await fetch(`${GOV_BASE}${path}`, opts); - net OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/pub/publish-tools.ts :730
const resp = await fetch(url, { - net OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/shared/system-stats.ts :40
const resp = await fetch(`${GOV_URL}/api/internal/gov-stats`, { - net OpenArx-AI-openarx-core-c862311/packages/mcp/src/publish-document.ts :203
const resp = await fetch( - net OpenArx-AI-openarx-core-c862311/packages/mcp/src/request-logger.ts :104
fetch(`${PORTAL_INTERNAL_URL}/api/internal/log-mcp-request`, { - net OpenArx-AI-openarx-core-c862311/packages/types/src/index.ts :498
fetch(options: FetchOptions): AsyncGenerator<RawDocument>;
secrets 32
- secrets OpenArx-AI-openarx-core-c862311/packages/api/src/db/backfill-qdrant-versioning.ts :19
...(process.env.QDRANT_API_KEY ? { apiKey: process.env.QDRANT_API_KEY } : {}), - secrets OpenArx-AI-openarx-core-c862311/packages/api/src/db/pool.ts :14
password: process.env.PG_PASSWORD ?? 'openarx_dev', - secrets OpenArx-AI-openarx-core-c862311/packages/api/src/db/setup-qdrant.ts :9
...(process.env.QDRANT_API_KEY ? { apiKey: process.env.QDRANT_API_KEY } : {}), - secrets OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/index.ts :42
const saKeyFile = process.env.GOOGLE_SA_KEY_FILE; - secrets OpenArx-AI-openarx-core-c862311/packages/api/src/model-router/vertex-llm.ts :149
const saKeyFile = config.serviceAccountKeyFile ?? process.env.GOOGLE_SA_KEY_FILE; - secrets OpenArx-AI-openarx-core-c862311/packages/api/src/storage/vector-store.ts :57
...(process.env.QDRANT_API_KEY ? { apiKey: process.env.QDRANT_API_KEY } : {}), - secrets OpenArx-AI-openarx-core-c862311/packages/cli/src/commands/ingest.ts :75
const anthropicKey = process.env.ANTHROPIC_API_KEY; - secrets OpenArx-AI-openarx-core-c862311/packages/embed-service/src/config.ts :49
openrouterApiKey: process.env.OPENROUTER_API_KEY ?? '', - secrets OpenArx-AI-openarx-core-c862311/packages/enrichment/src/runner/EnrichmentRunner.ts :50
const coreApiKey = process.env.CORE_API_KEY; - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/parsers/mathpix-parser.ts :29
const appKey = process.env.MATHPIX_APP_KEY; - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/enricher/github-verifier.ts :27
this.token = process.env.GITHUB_TOKEN; - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/pipeline/indexer-step.ts :49
...(process.env.QDRANT_API_KEY ? { apiKey: process.env.QDRANT_API_KEY } : {}), - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/runner/RunnerService.ts :184
const anthropicKey = process.env.ANTHROPIC_API_KEY; - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/migrate-embeddings.ts :83
embedSecret: process.env.CORE_INTERNAL_SECRET ?? '', - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/qdrant-backfill-deleted.ts :49
const apiKey = process.env.QDRANT_API_KEY; - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/re-enrich.ts :117
const openrouterKey = process.env.OPENROUTER_API_KEY; - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/reindex-missing-specter2.ts :80
embedSecret: process.env.CORE_INTERNAL_SECRET ?? '', - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/reindex-orphans.ts :59
embedSecret: process.env.CORE_INTERNAL_SECRET ?? '', - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/run-pipeline.ts :51
const anthropicKey = process.env.ANTHROPIC_API_KEY; - secrets OpenArx-AI-openarx-core-c862311/packages/ingest/src/scripts/scan-qdrant-orphans.ts :58
qdrantApiKey: process.env.QDRANT_API_KEY ?? '', - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/admin-routes.ts :36
const ADMIN_TOKEN = process.env.ADMIN_API_TOKEN ?? ''; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/context.ts :39
const openrouterKey = process.env.OPENROUTER_API_KEY; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/gov-identity.ts :10
const INTERNAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? ''; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/index.ts :31
const AUTH_TOKEN = process.env.MCP_AUTH_TOKEN ?? ''; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/internal-routes.ts :42
const INTERNAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? ''; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/portal-auth.ts :11
const INTERNAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? ''; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/portal-doc-queue.ts :37
const openrouterKey = process.env.OPENROUTER_API_KEY; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/gov/tools.ts :13
const INTERNAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? ''; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/pub/publish-tools.ts :724
const internalSecret = process.env.CORE_INTERNAL_SECRET; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/profiles/shared/system-stats.ts :12
const QDRANT_API_KEY = process.env.QDRANT_API_KEY ?? ''; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/publish-document.ts :28
const INTERNAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? ''; - secrets OpenArx-AI-openarx-core-c862311/packages/mcp/src/request-logger.ts :16
const PORTAL_SECRET = process.env.CORE_INTERNAL_SECRET ?? '';
database 4
- db OpenArx-AI-openarx-core-c862311/packages/api/src/db/pool.ts :1
import pg from 'pg'; - db OpenArx-AI-openarx-core-c862311/packages/api/src/storage/review-store.ts :15
import type { PoolClient } from 'pg'; - db OpenArx-AI-openarx-core-c862311/packages/embed-service/src/cache.ts :1
import { Redis } from 'ioredis'; - db OpenArx-AI-openarx-core-c862311/packages/mcp/src/lib/redis.ts :8
import { Redis } from 'ioredis';
declared dependencies 8
- @eslint/js@^9.39.4
- @typescript-eslint/eslint-plugin@^8.32.1
- @typescript-eslint/parser@^8.32.1
- eslint@^9.27.0
- eslint-config-prettier@^10.1.5
- prettier@^3.5.3
- typescript@^5.8.3
- typescript-eslint@^8.57.0