@absolutejs/mcp 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/changelog.json +14 -0
- package/dist/index.js +33 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/registeredCommerce.d.ts +12 -0
- package/docs/reviews/general-service-access.md +61 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,12 @@ This file is generated by `absolute-changelog` from the entries in
|
|
|
6
6
|
`changelog/`. Edit an entry, not this file — and add new ones under
|
|
7
7
|
`changelog/unreleased/`.
|
|
8
8
|
|
|
9
|
+
## 0.26.0 — 2026-09-13
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Resolve shared commerce policy from authenticated registered callback channels without per-account canary bindings.** (`registeredMcpProfiles`, `registeredMcpCommerce`)
|
|
14
|
+
|
|
9
15
|
## 0.25.0 — 2026-09-13
|
|
10
16
|
|
|
11
17
|
### Added
|
package/changelog.json
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
"contract": 1,
|
|
3
3
|
"name": "@absolutejs/mcp",
|
|
4
4
|
"releases": [
|
|
5
|
+
{
|
|
6
|
+
"changes": [
|
|
7
|
+
{
|
|
8
|
+
"kind": "added",
|
|
9
|
+
"summary": "Resolve shared commerce policy from authenticated registered callback channels without per-account canary bindings.",
|
|
10
|
+
"symbols": [
|
|
11
|
+
"registeredMcpProfiles",
|
|
12
|
+
"registeredMcpCommerce"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"date": "2026-09-13",
|
|
17
|
+
"version": "0.26.0"
|
|
18
|
+
},
|
|
5
19
|
{
|
|
6
20
|
"changes": [
|
|
7
21
|
{
|
package/dist/index.js
CHANGED
|
@@ -2952,6 +2952,37 @@ var createBackgroundWorkTools = (options) => {
|
|
|
2952
2952
|
});
|
|
2953
2953
|
return tools;
|
|
2954
2954
|
};
|
|
2955
|
+
// src/registeredCommerce.ts
|
|
2956
|
+
var registeredMcpProfiles = (redirectUris) => {
|
|
2957
|
+
if (!redirectUris.length)
|
|
2958
|
+
return ["unknown"];
|
|
2959
|
+
const classify = (value) => {
|
|
2960
|
+
try {
|
|
2961
|
+
const url = new URL(value);
|
|
2962
|
+
if (url.username || url.password)
|
|
2963
|
+
return "unknown";
|
|
2964
|
+
if (url.protocol === "https:" && ["claude.ai", "claude.com"].includes(url.hostname))
|
|
2965
|
+
return "claude-interactive";
|
|
2966
|
+
if (url.protocol === "https:" && ["chatgpt.com", "chat.openai.com"].includes(url.hostname))
|
|
2967
|
+
return "chatgpt-plugin";
|
|
2968
|
+
if (["http:", "https:"].includes(url.protocol) && ["127.0.0.1", "[::1]", "localhost"].includes(url.hostname))
|
|
2969
|
+
return "direct-mcp";
|
|
2970
|
+
if (["vscode:", "vscode-insiders:", "cursor:", "windsurf:"].includes(url.protocol))
|
|
2971
|
+
return "direct-mcp";
|
|
2972
|
+
if (url.origin === "https://vscode.dev" && url.pathname === "/redirect")
|
|
2973
|
+
return "direct-mcp";
|
|
2974
|
+
return "unknown";
|
|
2975
|
+
} catch {
|
|
2976
|
+
return "unknown";
|
|
2977
|
+
}
|
|
2978
|
+
};
|
|
2979
|
+
return [...new Set(redirectUris.map(classify))];
|
|
2980
|
+
};
|
|
2981
|
+
var registeredMcpCommerce = (options) => ({
|
|
2982
|
+
profiles: registeredMcpProfiles(options.redirectUris),
|
|
2983
|
+
reviews: options.reviews,
|
|
2984
|
+
capabilities: options.capabilities
|
|
2985
|
+
});
|
|
2955
2986
|
export {
|
|
2956
2987
|
COMMERCE_POLICY_SOURCES,
|
|
2957
2988
|
COMMERCE_POLICY_VERSION,
|
|
@@ -2999,6 +3030,8 @@ export {
|
|
|
2999
3030
|
projectWorkPreview,
|
|
3000
3031
|
protectedResourceMetadata,
|
|
3001
3032
|
publicMcpTask,
|
|
3033
|
+
registeredMcpCommerce,
|
|
3034
|
+
registeredMcpProfiles,
|
|
3002
3035
|
verifyBearer,
|
|
3003
3036
|
withMcpApp
|
|
3004
3037
|
};
|
package/dist/src/index.d.ts
CHANGED
|
@@ -56,3 +56,4 @@ export { createActionWorkflowTools, projectActionReview, projectActionJob, type
|
|
|
56
56
|
export { createCreditWorkResult, type McpCreditWorkSnapshot, } from "./creditWorkResult";
|
|
57
57
|
export { createBackgroundWorkTools, createBackgroundWorkResult, type McpBackgroundWorkSnapshot } from "./backgroundWork";
|
|
58
58
|
export type { McpBackgroundWorkEstimate } from "./backgroundWork";
|
|
59
|
+
export { registeredMcpProfiles, registeredMcpCommerce } from "./registeredCommerce";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CommerceContext, CommerceProfile, CommerceReview } from "./commerce";
|
|
2
|
+
/** Classify the callback channel from the authenticated OAuth registration.
|
|
3
|
+
* This identifies a transport/distribution shape, not a verified vendor or plan.
|
|
4
|
+
* Never pass tool arguments, clientInfo names, or unbound request metadata. */
|
|
5
|
+
export declare const registeredMcpProfiles: (redirectUris: readonly string[]) => CommerceProfile[];
|
|
6
|
+
/** Every authenticated account shares deployment policy; account ownership and
|
|
7
|
+
* available credit checks remain separate. Mixed callback profiles intersect. */
|
|
8
|
+
export declare const registeredMcpCommerce: (options: {
|
|
9
|
+
redirectUris: readonly string[];
|
|
10
|
+
reviews: readonly CommerceReview[];
|
|
11
|
+
capabilities?: CommerceContext["capabilities"];
|
|
12
|
+
}) => CommerceContext;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Account-independent service access
|
|
2
|
+
|
|
3
|
+
Reviewed September 13, 2026; re-review by October 13, 2026.
|
|
4
|
+
This supersedes the per-account canary condition for the general-access deployment,
|
|
5
|
+
not the published host restrictions or the requirement for explicit payment approval.
|
|
6
|
+
|
|
7
|
+
## Scope and decision
|
|
8
|
+
|
|
9
|
+
A customer account is not a distribution channel. Authenticated customers may use
|
|
10
|
+
an independently operated service against their existing service-credit entitlement,
|
|
11
|
+
without buying its portal subscription or being individually allowlisted. Each
|
|
12
|
+
operation still needs account authorization, an explicit maximum, durable metering
|
|
13
|
+
and recovery. Customer charges must never exceed the approved maximum.
|
|
14
|
+
|
|
15
|
+
Native, directly configured MCP connections may return a user-requested link to
|
|
16
|
+
the service's own HTTPS checkout. Card entry and confirmation happen on that page;
|
|
17
|
+
the MCP tool neither collects card data nor charges. Organizational policies may
|
|
18
|
+
block a user's connector; this service does not bypass those controls or certify
|
|
19
|
+
compliance with a customer's private contract. This is a scoped operator
|
|
20
|
+
interpretation, not vendor certification or a statement that every marketplace
|
|
21
|
+
allows commerce.
|
|
22
|
+
|
|
23
|
+
## Evidence and limits
|
|
24
|
+
|
|
25
|
+
- [MCP authorization](https://modelcontextprotocol.io/specification/2025-11-25/basic/authorization)
|
|
26
|
+
binds access to OAuth scopes and resource owners. The authenticated registration's
|
|
27
|
+
redirect destinations classify a native callback or hosted channel. They do not
|
|
28
|
+
attest a vendor identity, host account plan or marketplace listing.
|
|
29
|
+
- [VS Code MCP documentation](https://code.visualstudio.com/docs/agent-customization/mcp-servers)
|
|
30
|
+
documents direct connections and user/server trust. [GitHub additional terms](https://docs.github.com/en/site-policy/github-terms/github-terms-for-additional-products-and-features)
|
|
31
|
+
distinguish individual and organizational agreements. [Individual terms](https://docs.github.com/en/site-policy/github-terms/github-terms-of-service)
|
|
32
|
+
and [Copilot product terms](https://github.com/customer-terms/github-copilot-product-specific-terms)
|
|
33
|
+
leave users responsible for their use. Our inference is that separately requested
|
|
34
|
+
merchant service work is not resale of the host's own service. Keep independent
|
|
35
|
+
service billing separate and obey the host's access/data controls.
|
|
36
|
+
- [Claude interactive connectors](https://support.claude.com/en/articles/13454812-use-interactive-connectors-in-claude)
|
|
37
|
+
support third-party service accounts. Existing-credit access is separate from
|
|
38
|
+
purchases. In-connector payment operations remain blocked; this release does not
|
|
39
|
+
grant Claude credit-checkout links while that path remains unqualified.
|
|
40
|
+
- [OpenAI plugin guidelines](https://developers.openai.com/plugins/app-guidelines#commerce-and-monetization)
|
|
41
|
+
allow existing paid entitlements while prohibiting digital-credit sales and
|
|
42
|
+
transactional links. Existing work is not a new credit purchase. Keep pricing
|
|
43
|
+
promotions, top-up links, saved-card charges, subscriptions and auto-refill hidden
|
|
44
|
+
from that hosted profile; explain unavailable entitlements without an upsell.
|
|
45
|
+
|
|
46
|
+
## Shared implementation
|
|
47
|
+
|
|
48
|
+
`registeredMcpProfiles` and `registeredMcpCommerce` classify only callback URIs
|
|
49
|
+
loaded by the server for the authenticated OAuth client. Loopback/native callbacks
|
|
50
|
+
select the direct channel, recognized hosted origins select their restricted
|
|
51
|
+
profile, and unknown or mixed channels fail closed/intersect. Never classify from
|
|
52
|
+
`clientInfo`, a model name, a tool argument, or an unverified query parameter.
|
|
53
|
+
A native callback is not proof of Microsoft, Anthropic or OpenAI affiliation.
|
|
54
|
+
Marketplace deployments must select their marketplace profile explicitly rather
|
|
55
|
+
than reusing a native/direct review. Do not advertise an untested host as tested.
|
|
56
|
+
|
|
57
|
+
The package does not grant access by itself: the deployment supplies dated reviews,
|
|
58
|
+
capabilities, authentication, entitlement checks, rate limits and billing. Restrictive
|
|
59
|
+
published rules override these reviews. Account IDs are used to scope data and
|
|
60
|
+
charges, not to select an eligible customer cohort. Expired review evidence closes
|
|
61
|
+
paid tools while status/recovery remains available.
|
package/package.json
CHANGED