Parse Stack Next MCPサーバー
コミット 2026年11月11日Parse Server用のRuby SDKで、ORM、ベクトル検索、およびAIエージェント向けのMCPデプロイ機能を提供します。
別名 neurosynq/parse-stack-next
- スター
- 1
- ツール
- —
- ダウンロード数(30日間)
- —
- 最新バージョン
- —
- 最終コミット
- 2026年11月11日
- ライセンス
- MIT
Parse Stack Next MCPとは
Parse Stack NextはMCPサーバーです。 Parse Server用のRuby SDKで、ORM、ベクトル検索、およびAIエージェント向けのMCPデプロイ機能を提供します。.
プロジェクトのREADMEから生成された概要
Parse Stack Next MCP server について
Parse Serverを使用してAI駆動型アプリケーションを構築する開発者は、このRuby SDKを利用することで、オブジェクト関係マッピング(ORM)や高度な検索機能を通じてデータを管理できます。このツールは、低レベルのAPIクライアント、クエリエンジン、およびCloud Code Webhooks rackアプリケーションを統合した包括的なクライアントとして機能します。ローカルまたはリモートへのデプロイに対応しており、制御されたエージェントフィールドを通じて、特定のデータサブセットをAIエージェントに公開することが可能です。
このSDKは、Voyageなどのプロバイダーを使用したベクトル検索およびセマンティック検索の組み込みサポートを備えている点が特徴です。メモリ使用量を削減するためのオプションの量子化を含むAtlas定義など、ベクトルインデックス定義を管理するための専用ツールが含まれています。AIアシスタントをデプロイする場合、このサーバーはユーザー単位のスコープやマスターアナリティクスエンドポイントなど、異なるデプロイパターンをサポートします。また、コンテキスト化されたチャンク埋め込みやリランキングを伴うハイブリッド検索などの複雑なタスクも処理し、AIエージェントが安全でスコープの限定されたインターフェースを通じてデータとやり取りできるようにします。
できること
- 1AIエージェントのデータアクセス制限データプライバシーを確保するため、AIアシスタントがモデル内で参照またはクエリできる特定のフィールドを制限します。
- 2ベクトルインデックスのメモリ最適化スカラー量子化またはバイナリ量子化を使用して、ベクトルプロパティのメモリフットプリントを削減します。
- 3スコープ付きMCPエンドポイントのデプロイアイデンティティとテナントの境界を強制する専用のデプロイパターンを通じて、サインイン済みのアプリケーションユーザーにサービスを提供します。
プロジェクトの README から作成されています。すべてのユースケースは、その引用と照らし合わせて確認されています。
設定
ALLOW_INSECURE_BINDATLAS_URILLM_ENDPOINTLLM_MODELMONGO_BINDMONGO_HOST_PORTMONGO_ROOT_PASSWORDPARSE_API_KEYPARSE_APP_IDPARSE_HOST_PORTPARSE_MASTER_KEYPARSE_MCP_ENABLEDPARSE_STACK_LOGGINGPARSE_TEST_API_KEYPARSE_TEST_APP_IDPARSE_TEST_LIVE_QUERY_URLPARSE_TEST_MASTER_KEYPARSE_TEST_MONGO_URIPARSE_TEST_REDIS_URLPARSE_TEST_SERVER_URLPARSE_TEST_USE_DOCKERPSNEXT_PREFIXREDIS_HOST_PORT
| 名前 | 説明 | 種類 |
|---|---|---|
| ALLOW_INSECURE_BIND | — | |
| ATLAS_URI | — | |
| LLM_ENDPOINT | — | |
| LLM_MODEL | — | |
| MONGO_BIND | — | |
| MONGO_HOST_PORT | — | |
| MONGO_ROOT_PASSWORD | — | |
| PARSE_API_KEY | — | |
| PARSE_APP_ID | — | |
| PARSE_HOST_PORT | — | |
| PARSE_MASTER_KEY | — | |
| PARSE_MCP_ENABLED | — | |
| PARSE_STACK_LOGGING | — | |
| PARSE_TEST_API_KEY | — | |
| PARSE_TEST_APP_ID | — | |
| PARSE_TEST_LIVE_QUERY_URL | — | |
| PARSE_TEST_MASTER_KEY | — | |
| PARSE_TEST_MONGO_URI | — | |
| PARSE_TEST_REDIS_URL | — | |
| PARSE_TEST_SERVER_URL | — | |
| PARSE_TEST_USE_DOCKER | — | |
| PSNEXT_PREFIX | — | |
| REDIS_HOST_PORT | — |
自動チェック
実行日 2026年11月15日完全なレポート →まだ検証されていません。サーバーには80点のスコア、重大な問題がないこと、および検証に必要な十分なデータが必要です。 チェックの仕組み · 点数を上げるための改善点
- ソースリポジトリがリンクされており、アクセス可能neurosynq/parse-stack-next is public and reachablegithub.com/neurosynq/parse-stack-next ↗合格
- パッケージがこのリポジトリをソースとして指定未チェック
- ビルドの来歴 (Sigstore 証明)未チェック
- オープンソースライセンス (OSI)MITspdx.org/licenses/MIT.html ↗合格
- 過去1年以内にコミットまたはリリースありLast commit or release 2026-11-11github.com/neurosynq/parse-stack-next ↗合格
- OpenSSF Scorecard未チェック
- パッケージ名が有名なパッケージに酷似していない未チェック
- パッケージおよびその依存関係に重大な勧告なし未チェック
- モデルへの隠れた指示がない0 tool descriptions and the README read; no override phrases, credential paths or hidden characters合格
- 破壊的なツールがラベル付けされている未チェック
- リモートエンドポイントが MCP ハンドシェイクに応答未チェック
README
GitHubで見る
Parse Stack Next
A full-featured Ruby client SDK for Parse Server. parse-stack-next is a Ruby client SDK, REST client, and Active Model ORM for Parse Server, combining a low-level API client, a query engine, an object-relational mapper (ORM), and a Cloud Code Webhooks rack application in a single gem.
What's new in 5.8
- 5.8.0: MCP deployments can expose less than their users can read.
Parse::Agent.new(fields: { Customer => %i[display_name timezone] })narrows a class'sagent_fieldsfor one agent, so a user-facing assistant and an analytics endpoint in one process expose different subsets of the same model. It applies to queries, includes, aggregation, search, schema output, exports, andsemantic_searchtext, andquery_class/count_objects/export_datanow refuse filtering or sorting on a hidden field. See CHANGELOG.md - 5.8.0: Supported deployment patterns.
MCPRackApp.user_scopedserves signed-in application users (no master-key fallback, server-pinned identity and tenant), andMCPRackApp.master_analyticsserves a shared read-only analytics endpoint that requires an operatorprincipal_resolver. Cancellations and approval replies are now bound to the session's owner, revocation intervals are documented, and orphaned subscriptions are reaped. See CHANGELOG.md - 5.8.0: Retrieval profiles for
semantic_search. Profiles you register on the server (for examplefast,balanced,precise; none ship by default) compose hybrid search and reranking with budgets, spend accounting, and observable fallback; each call emits a sanitizedparse.retrieval.searchevent, andParse::Retrieval::Benchmarkmeasures profiles on labeled cases. See CHANGELOG.md - 5.8.0: Vector index definitions from the model, with optional quantization.
Parse::VectorSearch::IndexDefinitiongenerates the Atlas definition from your declarations (filters and tenant field included) with preview and diff, andquantization: :scalar/:binaryon a:vectorproperty shrinks index memory without changing stored data. Contextualized embedding batches now adapt to provider size limits. See CHANGELOG.md - 5.8.0: Two silent mismatches fixed; check whether you need to act. Queries now send a property's declared
field:name exactly as declared (property :account_id, :string, field: :account_idqueriesaccount_id, no longeraccountId), so queries that matched nothing against underscore or mixed-case columns now return rows. Vector search, index auto-discovery, and drift checks now use the stored column of a multi-word:vectorproperty: an Atlas vector index whose path is the Ruby name (body_embedding) must be recreated on the stored column (bodyEmbedding). Drift detection reports the mismatch. See CHANGELOG.md
See CHANGELOG.md for the full 5.8 entry.
What's new in 5.7
- 5.7.6:
semantic_searchrespectsagent_fieldsfor chunk content. A class that embedded a field hidden by itsagent_fieldsallowlist returned that field's text as chunk content. Chunk text now comes only from embedded fields the agent may read; a hidden text source is refused with:field_deniedbefore the search runs. See CHANGELOG.md - 5.7.5: MongoDB 9.0 support. The test stack runs MongoDB 9 by default (
MONGO_VERSION=8selects the previous major), and use themongodriver 2.26 or newer for 9.0's overload handling. MongoDB 9.0 changes hownullcomparisons treat dotted paths through arrays; see the behavior notes in CHANGELOG.md - 5.7.5:
voyage-code-4and contextualized chunk embeddings. The Voyage provider acceptsvoyage-code-4,voyage-context-4, andvoyage-context-3.Voyage#embed_chunksembeds whole chunked documents so each chunk's vector carries its document's context. See CHANGELOG.md - 5.7.5: Voyage reranker and MCP 2025-11-25.
Parse::Retrieval::Reranker::Voyageaddsrerank-3andrerank-3-litereranking, including through the Atlas endpoint. The MCP server negotiates protocol2025-11-25and addscompletion/complete(class and field names scoped to the agent) andlogging/setLevel. Mongo-direct reads re-run queries MongoDB 9.0 kills mid-flight. See CHANGELOG.md - 5.7.0: Reserved, app-scoped cache keyspace.
Parse::Cache::Keyspacelays out response, identity, and role-cache keys on a shared backend (parse-stack:v1:<app_scope>[:<namespace>]:<family>[:T:<tenant>]:<rest>) and owns the glob patterns that clear them again, so key generation and eviction can no longer drift apart.app_scopeis a digest of the application id and server URL, so two apps sharing one Redis no longer collide. Enable withcache_keyspace: trueonParse.setup; left unset, behavior is unchanged. See CHANGELOG.md - 5.7.0:
clear_cache!stops falling back toFLUSHDB. Withcache_keyspace: true,Parse::Client#clear_cache!performs a scoped SCAN inside the client's own keys instead of flushing the whole database, which previously could destroy co-tenant data and dropfirst_or_create!create-locks on a shared Redis.flush_db!remains the explicit opt-in for a full flush. See CHANGELOG.md - 5.7.0: Response-cache auth separation enforced by construction.
Parse::Cache::Keyspace#cache_keynow requires anauth:discriminator for the response-cache family and refuses to build a key without one, so a master-key body and a session-token body can no longer land under the same key by accident. A non-GET write now invalidates every auth variant of a resource in one scoped pattern instead of only the variants the process has already seen. See CHANGELOG.md - 5.7.0: Shared identity and role planes.
Parse::Cache::ScopedView#identityand#roles, reached throughclient.sdk_cache, returnParse::Cache::SubCacheplanes for the client's authorization context, so every worker resolves a session token or role closure against one shared backend instead of its own in-process cache. Each plane invalidates by per-subject generation counter and plane-wide epoch rather than needing to enumerate entries it cannot name. See CHANGELOG.md - 5.7.0: Authorization becomes a client-owned module, not an Atlas Search internal.
Parse::Authorizationnow owns session-token resolution and role-closure expansion.client.authorizationreturns aParse::Authorization::Context, one perParse::Client, so two clients addressing two Parse applications no longer share one identity cache and one role cache, and a mongo-direct query with no$searchanywhere in it no longer resolves identity through the Atlas Search namespace.Parse::AtlasSearch.session_cache=,.role_cache=, andParse::AtlasSearch::Sessionremain as deprecated aliases for the default client's context, slated for removal in 6.0. See CHANGELOG.md - 5.7.0: Mongo-direct reads stay bound to the authorizing client.
Parse::MongoDB.verify_client!rejects a direct read when its authorization client belongs to a different Parse application than the process-global MongoDB connection. Direct-query entry points acceptclient:and carry it through authorization and collection binding. See CHANGELOG.md - 5.7.0: Effective access decisions for users and roles.
Parse::Access.check,Parse::Access::Decision, and thecan_read?/can_write?/can_delete?helpers combine object ACLs with class-level permissions and inherited roles. Unknown evidence fails closed, and the eventual Parse Server request remains authoritative. See CHANGELOG.md - 5.7.0: Cache invalidation no longer depends on application discipline.
Parse::Cache::Invalidationregisters webhook triggers on_Role,_User, and_Session(after_save/after_delete/after_logout) that keep the identity and role planes honest for writes from any client, not only the app's own logout and role-mutation code paths. Installs alongside the keyspace; disable withcache_invalidation_hooks: false. See CHANGELOG.md - 5.7.0: Optional read of Parse Server's own role cache.
Parse::Cache::UpstreamRolescan read the<appId>:role:<userId>closure Parse Server already wrote for itself. Role resolution does not consume it: the SDK still computes its own closure, and the only built-in integration iscompare_upstream_roles, which emits aparse.cache.role_compareevent so the two can be reconciled before anything depends on the upstream value. Callroles_fordirectly to use it. Strictly read-only, degrades to a miss on any anomaly, andParse::Cache::Redis#verify_upstream_isolation!reports whether the two Redis endpoints share one database. See CHANGELOG.md
See CHANGELOG.md for the full 5.7 entry, including behavior notes and a complete setup example.
What's new in 5.6
- 5.6.0: Voyage embeddings reach the Atlas endpoint, video, and streamed media. The Voyage provider now targets MongoDB's Atlas Embedding and Reranking API as well as Voyage's own; an Atlas-prefixed key routes automatically, or pass
endpoint: :atlas/:voyageexplicitly. Addsvoyage-3.5,voyage-3.5-lite,voyage-code-2, andvoyage-multimodal-3.5, plusembed_video.Parse::Embeddings::MediaFilestreams local image and video uploads into the request body in fixed-size chunks instead of buffering them, bounding peak memory regardless of file size. See CHANGELOG.md - 5.6.0 (Breaking): Voyage's default model moves to
voyage-3.5.voyage-3is retired from the Atlas endpoint, so the old default failed at construction for an Atlas key with no model named. Code relying on the previous default should pinmodel: "voyage-3"to keep existing embeddings valid, or re-embed againstvoyage-3.5. See CHANGELOG.md - 5.6.0: Vector search no longer underfills.
$vectorSearchapplied itslimitbefore the SDK's ACL match,protectedFieldsredaction, and pointer filtering, so a scoped caller who could read 2 of the top 10 documents got 2 results even when hundreds of readable matches existed further down the ranking. The search now requests a wider internal candidate window, applies every enforcement layer, and only then trims to the requested count; acandidate_limit:option tunes the window, and aparse.vector_search.searchnotification reports attrition. Hybrid search's own candidate-window and fusion-depth bugs are fixed the same way. See CHANGELOG.md - 5.6.0:
:vectorproperties are checked against the provider actually registered. A property's declaredmodel:was recorded but never enforced, so swapping the registered provider's model could silently mix incomparable vectors into one index with no error.Parse::Embeddings::BindingAuditnow checksmodel:anddimensions:before any request, on both the managed-write and query-embedding paths, and fails closed if the provider cannot report either.Parse::Embeddings::BindingAudit.audit_all!checks every declared binding at once for a boot-time or CI gate. See CHANGELOG.md - 5.6.0: Corrected the model dimension table. The entire Voyage v4 family defaults to 1024;
voyage-4-large's 2048 andvoyage-4-lite's 512 were recorded as native widths when they are Matryoshka options reached only by requesting them, which made both models raiseParse::Embeddings::InvalidResponseErroron every call. Any width on a model's Matryoshka ladder is now accepted. See CHANGELOG.md
See CHANGELOG.md for the full 5.6 entry.
What's new in 5.5
- 5.5.0 — Multimodal bytes-fetch with magic-byte MIME verification —
embed_image ..., source: :byteshas the SDK download an image itself through theParse::File.safe_open_urlSSRF primitive, verify the content by magic-byte sniff (theContent-Typeheader is never consulted — a.jpgURL serving HTML is refused), cross-check the URL extension, enforce aParse::Embeddings.allowed_image_typesallowlist, strip EXIF/XMP metadata by default (JPEG APP1, PNGeXIf, WebPEXIF/XMPchunks; opt out withexif_strip: false), and forward the verified bytes to Voyage/Cohere as a base64 data URI. No provider-side URL fetch occurs, so thetrust_provider_url_fetchsentinel is not required — the host allowlist still applies. See CHANGELOG.md - 5.5.0 — Embedding-model migration tooling —
Class.reembed!(only_stale: true)bulk re-embeds rows through the current provider/model (resumable; skips rows already current), driven by the new auto-declared<into>_metaprovenance sibling ({provider, model, dimensions, modality, embedded_at}, stamped on every recompute).Parse::Embeddings::BatchEmbedderadds batch-level requests-per-minute pacing and exponential backoff for bulk jobs;Parse::Embeddings::Cache.enable!adds an opt-in query-embed cache keyed by(provider, model, input_type, input-hash)so repeated identical queries skip the provider round-trip. See CHANGELOG.md - 5.5.0 — Vector index drift detection — on first auto-discovered use of an Atlas vectorSearch index, the SDK verifies the deployed index's
numDimensions/similarityagainst the:vectorproperty declaration and confirms a registeredagent_tenant_scopefield is covered as atype: "filter"path. Policy viaParse::VectorSearch.index_drift_policy(:warndefault /:raise/:ignore).Parse::Schema::SearchIndexMigratornow auto-includes the tenant-scope field invectorSearchdeclarations, so newly created indexes support tenant-scoped pre-filtering out of the box. See CHANGELOG.md - 5.5.0 — Retrieval spend-cap and filter hardening — the per-tenant embedding spend cap now covers every query-embed path (
find_similar(text:),hybrid_search(text:),Parse::Retrieval.retrieve), not just thesemantic_searchagent tool; tenant identity resolves through the ambientParse.with_cache_tenantscope. Caller-supplied retrieval filters now translate Parse pointer values to storage form ({ owner: user }→{ "_p_owner" => "_User$id" }), so pointer filters match rows instead of silently matching nothing. See CHANGELOG.md
What's new in 5.4
- 5.4.0 — Hybrid search + reranking for RAG —
Class.hybrid_search(text:, lexical:, vector:, k:, fusion:)fuses a lexical Atlas Search branch with a$vectorSearchbranch using reciprocal-rank fusion (RRF): lexical search nails exact tokens (codes, proper nouns), vector search nails paraphrase, and fusing the two beats either alone. Each branch enforces ACL/CLP independently before fusion (no separate hydration fetch to secure); results carry#hybrid_score/#hybrid_ranks.Parse::VectorSearch::Hybrid.rank_fusion_supported?detects Atlas 8.0+ native$rankFusionby a cached behavioural probe (native execution is opt-in; client-side RRF is the always-enforced default).Parse::Retrieval::Rerankeradds cross-encoder reranking (Reranker::Cohereover/v2/rerank, plus a deterministicReranker::Fixture), wired intoParse::Retrieval.retrieve(hybrid:, rerank:).Parse::Embeddings::SpendCapadds an opt-in per-tenant embedding token cap (hard-refuse) at thesemantic_searchagent-tool boundary. See CHANGELOG.md anddocs/atlas_vector_search_guide.md - 5.4.0 — Vector backfill, visibility, and webhook redaction —
Class.embed_pending!backfills embeddings for records whose managed:vectorfield is null (objectId-cursor pagination);Parse::Object#compute_embedding!forces an in-place recompute without a save;vector_visibility :owner_only | :publiccontrols whether a class's vectors appear inas_jsonby default; and webhook trigger payloads now strip declared:vectorcolumns by default (a:publicclass keeps them). See CHANGELOG.md - 5.4.0 — TOTP multi-factor auth works end to end — the
Parse::UserMFA lifecycle is now fully functional and exercised against a real MFA-enabled Parse Server.setup_mfa!(secret:, token:)enrolls TOTP and returns recovery codes;Parse::User.login_with_mfa(user, pass, code)completes a second-factor login;mfa_enabled?/mfa_statusreport enrollment after an ordinary fetch — the SDK strips the raw TOTP secret and recovery codes that Parse Server returns inauthDatabut preserves a leak-safe{status: "enabled"}projection so the status reads correctly without exposing the secret;disable_mfa!(current_token:)turns MFA off after re-validating the current code (a wrong code raisesParse::MFA::VerificationError), anddisable_mfa_master_key!(authorized_by:)is the operator override. Each MFA write also no longer raises an internal argument error before reaching the server. Interactively,rake client:consolenow prompts for a TOTP / recovery code (or readsPARSE_LOGIN_MFA) when logging into an enrolled account. See CHANGELOG.md - 5.4.0 — Request email-address verification —
Parse::User.request_email_verification(email)and the instanceParse::User#request_email_verificationask Parse Server to (re)send the verification email for a registered, not-yet-verified user, mirroringrequest_password_reset(per-email rate limiting, Boolean return). Requires a server email adapter withverifyUserEmailsenabled. See CHANGELOG.md - 5.4.0 — Audience hash queries persist correctly —
Parse::Audience#queryis now stored as a JSON string on the wire to match Parse Server's_Audience.querycolumn type, so saving an audience with aHashquery no longer fails the server schema check. The public API is unchanged — assign aHash, read aHashback. See CHANGELOG.md - 5.4.0 — Faster AtlasSearch role-cache expiry —
Parse::AtlasSearchrole_cache_ttlnow defaults to 30 seconds (was 120) so a role grant or revoke is reflected in$searchACL decisions sooner, at the cost of slightly more frequent role lookups. See CHANGELOG.md
What's new in 5.3
- 5.3.0 — Run webhook handlers (and clients) as the calling user — Parse Server embeds the caller's live session token in every trigger webhook fired by a logged-in user. A handler can now opt in to acting on the server as that user — full ACL/CLP/
protectedFieldsenforcement, no master key.payload.session_tokenexposes the captured token (nilfor master-key requests; still scrubbed frompayload.user/payload.object/as_json/logs);payload.user_agentreturns a client-modeParse::Agent, andpayload.user_clienta non-masterParse::Clientwith the token bound so even raw REST calls authorize as the user. The same user-scoped client is available client-side viaParse::User#session_clientand theParse::Client#become(token)primitive, withParse::Client#with_session { … }for block scoping. Backed by a newParse::Client.new(session_token:)option. See Acting as the calling user - 5.3.0 — Pluralized class-name aliases — referencing the plural form of a model constant now resolves to that class, so
Posts.where(:author.eq => user).countworks for a classPost. The alias is created lazily on first reference and is the same class object, so every class method (query/where,count,find,all, scopes) works through it andPosts.parse_classstill returns"Post". Because it is the same class it adds noParse::Object.descendantsentry and never registers a separate Parse schema class. Classes whose name already ends insare skipped by the automatic path; non-Parse plurals and typos fall through to a normalNameError. On by default — opt out withParse.pluralized_aliases = false(orPARSE_PLURALIZED_ALIASES=false). For a custom plural, ans-ending class, or a namespaced model, callpluralized_alias!in the class body. See Pluralized class-name aliases - 5.3.0 — afterSave create reports changed fields; force_ssl-consistent file equality — a trigger handler that keys off dirty tracking now sees every field on an
afterSavecreate, symmetric withafterSaveupdates: the built object marks each populated data property changed (fromnil) whilecreatedAt/updatedAt/ACL/objectIdstay clean and object readability,new?, andexisted?are unchanged — so a handler that builds a payload from*_changed?/changesworks uniformly across create and update. Separately,Parse::File#==now compares both files through the canonicalurlreader, so two files at the same location compare equal regardless ofParse::File.force_ssl(anda == bmatchesb == a), and a re-signed URL for the same object no longer reads as a change. See Cloud Code Triggers