Conversation
Glasser operates a hosted remote MCP server at https://api.glasser.ai/mcp that gives agents search, inspect and run over 1,000+ paid data endpoints (person and company enrichment, people and company search, web/news/maps search, SEO, social media, US property data) behind one key, billed per call at each endpoint's published price. The server answers unauthenticated requests with an RFC 9728 challenge, publishes RFC 8414 metadata with a dynamic client registration endpoint, and accepts a Glasser Key as a bearer token, so it fits the catalog's dcr_or_api_key shape with no runtime code. Adds the research ledger entry, the ingest mappings (category data, API key placement), the generated definition, official brand marks (black on light, orange on dark) with the manifest entry, and the test expectations.
|
| { | ||
| "key": "mcp-oauth", | ||
| "transport": "mcp_remote", | ||
| "auth": "oauth", | ||
| "ownershipModes": [ | ||
| "dcr" |
There was a problem hiding this comment.
Required lifecycle proof is missing
This store-visible connector exposes both OAuth and API-key methods, but the PR states that the Paperclip connect-to-revoke flow was not run. The repository's connector playbook requires account-bound connect, catalog, safe-call, refresh or reconnect, revoke, and secret-inspection validation for every exposed method. Complete that validation for both methods before merging.
Context Used: AGENTS.md (source)
Prompt To Fix With AI
This is a comment left during a code review.
Path: packages/shared/src/app-definitions/glasser.json
Line: 20-25
Comment:
**Required lifecycle proof is missing**
This store-visible connector exposes both OAuth and API-key methods, but the PR states that the Paperclip connect-to-revoke flow was not run. The repository's connector playbook requires account-bound connect, catalog, safe-call, refresh or reconnect, revoke, and secret-inspection validation for every exposed method. Complete that validation for both methods before merging.
**Context Used:** AGENTS.md ([source](https://github.com/paperclipai/paperclip/blob/master/AGENTS.md))
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.Glasser's RFC 9728 metadata declares scopes_supported: ["mcp"], so the browser sign-in method now carries scopesHint: ["mcp"]; without it the token the authorization server issues can be refused by the MCP resource. The API-key method's "Where do I find this?" link now opens https://app.glasser.ai/keys, where keys are created, instead of the docs.
Thinking Path
Linked Issues or Issue Description
Agent or provider
Glasser — a hosted remote MCP server over a catalog of paid third-party data endpoints (Apollo, People Data Labs, Hunter, Semrush, Ahrefs, DataForSEO, Serper, Exa, ScrapeCreators, RentCast and others) under one key.
Why this adapter is useful
Research, sales and marketing agents stop at "this data is not accessible" when the answer sits behind a paid API. With this connection an agent searches the endpoint catalog, inspects the exact contract and price, and runs the endpoint; Paperclip governs the connection and Glasser bills the call. No per-vendor keys, no scraper.
How the agent is invoked
Hosted remote MCP server (Streamable HTTP) at
https://api.glasser.ai/mcp. Two access paths, verified against the live server on 2026-09-22:WWW-Authenticatechallenge with RFC 9728 protected-resource metadata; the authorization server publishes RFC 8414 metadata with aregistration_endpoint, so Paperclip's automatic dynamic client registration applies. PKCES256.gl_prefix) sent asAuthorization: Bearer, created at https://app.glasser.ai/keys.Official docs: https://glasser.ai/docs/mcp-server
Are you willing to implement it?
Yes. Implemented in this pull request. Disclosure: I work on Glasser.
Additional context
Research evidence collected 2026-09-22 from live protocol probes and the provider's own metadata endpoints:
POST https://api.glasser.ai/mcpreturns HTTP 401 withWWW-Authenticate: Bearer realm="glasser", error="invalid_token", resource_metadata="https://api.glasser.ai/.well-known/oauth-protected-resource/mcp", scope="mcp".GET https://api.glasser.ai/.well-known/oauth-protected-resource/mcp→resource: https://api.glasser.ai/mcp,authorization_servers: ["https://app.glasser.ai/api/auth"],scopes_supported: ["mcp"],bearer_methods_supported: ["header"].GET https://app.glasser.ai/api/auth/.well-known/oauth-authorization-server→authorization_endpoint,token_endpoint,registration_endpoint(/oauth2/register),code_challenge_methods_supported: ["S256"],grant_types_supported: ["authorization_code", "client_credentials", "refresh_token"]. No registration was performed during the probe.initializeanswers serverglasser(protocol2025-06-18) andtools/listreturnssearch,inspect,run,runs_get,runs_list,runs_stop,balance.Risk tier S2: read-only business and public data (some endpoints return professional contact details); no money movement, deploys or external messaging. Each run is a paid call at a published price; the method guidance says so.
What Changed
packages/shared/src/self-serve-mcp-research.json: add the Glasser ledger entry (dcr_or_api_key, S2, wave 4, docs and server URLs)scripts/ingest-app-definitions.mjs: categorydata; API key placementAuthorization: Bearerwith agl_placeholderpackages/shared/src/app-definitions/glasser.jsonandapp-definitions.generated.ts: generated bynode scripts/ingest-app-definitions.mjs --definitions-only; methodsmcp-oauth(DCR) andmcp-api-keyui/public/brands/apps/glasser.svg,glasser-dark.svg,manifest.json: the official Glasser mark from the provider's brand kit (black head / orange strap on light, orange head / black strap on dark),catalogVisible: truepackages/shared/src/app-definitions.test.ts: ledger and store counts, plus a Glasser methods assertionserver/src/__tests__/tool-access-service.test.ts: catalog count and slug listVerification
Live proof: the four probes listed under Additional context, run on 2026-09-22 against
api.glasser.ai. Outstanding: thetool-access-serviceserver test needs embedded Postgres and was not run locally; CI runs it. A full connect → grant → execute → revoke pass through the Paperclip UI was not run in this PR.Risks
Model Used
claude-fable-5-1, extended thinking, tool use, via Claude Code; a human reviewed every file and ran the live probes.Checklist
Fixes: #/Closes #/Refs #OR (b) described the issue in-PR following the relevant issue template#NNN/github.com/paperclipai/paperclipURLs)docs/...,fix/...) and contains no internal Paperclip ticket id or instance-derived details