@framingui/mcp-server 0.6.26 → 0.6.28
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/README.md +4 -3
- package/dist/__tests__/react-native-contract.test.d.ts +2 -0
- package/dist/__tests__/react-native-contract.test.d.ts.map +1 -0
- package/dist/__tests__/react-native-contract.test.js +50 -0
- package/dist/__tests__/react-native-contract.test.js.map +1 -0
- package/dist/auth/state.d.ts +16 -0
- package/dist/auth/state.d.ts.map +1 -1
- package/dist/auth/state.js +54 -15
- package/dist/auth/state.js.map +1 -1
- package/dist/auth/verify.d.ts +9 -0
- package/dist/auth/verify.d.ts.map +1 -1
- package/dist/auth/verify.js.map +1 -1
- package/dist/billing/quota-policy.d.ts +13 -0
- package/dist/billing/quota-policy.d.ts.map +1 -0
- package/dist/billing/quota-policy.js +32 -0
- package/dist/billing/quota-policy.js.map +1 -0
- package/dist/billing/tool-metering.d.ts +10 -0
- package/dist/billing/tool-metering.d.ts.map +1 -0
- package/dist/billing/tool-metering.js +126 -0
- package/dist/billing/tool-metering.js.map +1 -0
- package/dist/billing/usage-ledger.d.ts +61 -0
- package/dist/billing/usage-ledger.d.ts.map +1 -0
- package/dist/billing/usage-ledger.js +102 -0
- package/dist/billing/usage-ledger.js.map +1 -0
- package/dist/billing/usage-sync.d.ts +3 -0
- package/dist/billing/usage-sync.d.ts.map +1 -0
- package/dist/billing/usage-sync.js +40 -0
- package/dist/billing/usage-sync.js.map +1 -0
- package/dist/cli/agent-md-templates.d.ts.map +1 -1
- package/dist/cli/agent-md-templates.js +58 -38
- package/dist/cli/agent-md-templates.js.map +1 -1
- package/dist/cli/commands.d.ts +2 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +20 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/guide-template.d.ts.map +1 -1
- package/dist/cli/guide-template.js +20 -36
- package/dist/cli/guide-template.js.map +1 -1
- package/dist/cli/help.d.ts +5 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +59 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/init.d.ts +2 -3
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +33 -48
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/package-manager.d.ts +5 -0
- package/dist/cli/package-manager.d.ts.map +1 -0
- package/dist/cli/package-manager.js +34 -0
- package/dist/cli/package-manager.js.map +1 -0
- package/dist/cli/update.d.ts +8 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +53 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/commands/slash-command-adapters.d.ts +9 -0
- package/dist/commands/slash-command-adapters.d.ts.map +1 -0
- package/dist/commands/slash-command-adapters.js +116 -0
- package/dist/commands/slash-command-adapters.js.map +1 -0
- package/dist/data/component-fallback-catalog.d.ts +26 -0
- package/dist/data/component-fallback-catalog.d.ts.map +1 -0
- package/dist/data/component-fallback-catalog.js +149 -0
- package/dist/data/component-fallback-catalog.js.map +1 -0
- package/dist/data/component-props.d.ts +30 -0
- package/dist/data/component-props.d.ts.map +1 -0
- package/dist/data/component-props.js +537 -0
- package/dist/data/component-props.js.map +1 -0
- package/dist/data/component-registry.d.ts +30 -0
- package/dist/data/component-registry.d.ts.map +1 -0
- package/dist/data/component-registry.js +320 -0
- package/dist/data/component-registry.js.map +1 -0
- package/dist/data/examples/screen-examples.d.ts +38 -0
- package/dist/data/examples/screen-examples.d.ts.map +1 -0
- package/dist/data/examples/screen-examples.js +500 -0
- package/dist/data/examples/screen-examples.js.map +1 -0
- package/dist/data/react-native-runtime-catalog.d.ts +24 -0
- package/dist/data/react-native-runtime-catalog.d.ts.map +1 -0
- package/dist/data/react-native-runtime-catalog.js +265 -0
- package/dist/data/react-native-runtime-catalog.js.map +1 -0
- package/dist/index.js +225 -205
- package/dist/index.js.map +1 -1
- package/dist/platform-support.d.ts +22 -0
- package/dist/platform-support.d.ts.map +1 -0
- package/dist/platform-support.js +148 -0
- package/dist/platform-support.js.map +1 -0
- package/dist/project-context-resolution.d.ts +7 -0
- package/dist/project-context-resolution.d.ts.map +1 -0
- package/dist/project-context-resolution.js +21 -0
- package/dist/project-context-resolution.js.map +1 -0
- package/dist/project-context-state.d.ts +12 -0
- package/dist/project-context-state.d.ts.map +1 -0
- package/dist/project-context-state.js +14 -0
- package/dist/project-context-state.js.map +1 -0
- package/dist/project-context.d.ts +15 -0
- package/dist/project-context.d.ts.map +1 -0
- package/dist/project-context.js +78 -0
- package/dist/project-context.js.map +1 -0
- package/dist/prompts/doctor-workflow.js +1 -1
- package/dist/prompts/getting-started.d.ts.map +1 -1
- package/dist/prompts/getting-started.js +36 -15
- package/dist/prompts/getting-started.js.map +1 -1
- package/dist/prompts/screen-workflow.d.ts.map +1 -1
- package/dist/prompts/screen-workflow.js +54 -3
- package/dist/prompts/screen-workflow.js.map +1 -1
- package/dist/schemas/mcp-schemas.d.ts +954 -309
- package/dist/schemas/mcp-schemas.d.ts.map +1 -1
- package/dist/schemas/mcp-schemas.js +130 -1
- package/dist/schemas/mcp-schemas.js.map +1 -1
- package/dist/tools/detect-project-context.d.ts +5 -0
- package/dist/tools/detect-project-context.d.ts.map +1 -0
- package/dist/tools/detect-project-context.js +36 -0
- package/dist/tools/detect-project-context.js.map +1 -0
- package/dist/tools/get-screen-generation-context.d.ts +3 -1
- package/dist/tools/get-screen-generation-context.d.ts.map +1 -1
- package/dist/tools/get-screen-generation-context.js +120 -20
- package/dist/tools/get-screen-generation-context.js.map +1 -1
- package/dist/tools/list-components.d.ts.map +1 -1
- package/dist/tools/list-components.js +42 -3
- package/dist/tools/list-components.js.map +1 -1
- package/dist/tools/list-screen-templates.d.ts +3 -1
- package/dist/tools/list-screen-templates.d.ts.map +1 -1
- package/dist/tools/list-screen-templates.js +3 -3
- package/dist/tools/list-screen-templates.js.map +1 -1
- package/dist/tools/preview-component.d.ts.map +1 -1
- package/dist/tools/preview-component.js +57 -7
- package/dist/tools/preview-component.js.map +1 -1
- package/dist/tools/preview-theme.d.ts +3 -1
- package/dist/tools/preview-theme.d.ts.map +1 -1
- package/dist/tools/preview-theme.js +48 -21
- package/dist/tools/preview-theme.js.map +1 -1
- package/dist/tools/theme-authority.js +1 -1
- package/dist/tools/theme-authority.js.map +1 -1
- package/dist/tools/validate-environment.d.ts +3 -1
- package/dist/tools/validate-environment.d.ts.map +1 -1
- package/dist/tools/validate-environment.js +102 -9
- package/dist/tools/validate-environment.js.map +1 -1
- package/dist/tools/validate-screen-definition.d.ts.map +1 -1
- package/dist/tools/validate-screen-definition.js +41 -7
- package/dist/tools/validate-screen-definition.js.map +1 -1
- package/dist/tools/whoami.d.ts.map +1 -1
- package/dist/tools/whoami.js +27 -17
- package/dist/tools/whoami.js.map +1 -1
- package/dist/utils/style-contract-reader.d.ts +10 -0
- package/dist/utils/style-contract-reader.d.ts.map +1 -0
- package/dist/utils/style-contract-reader.js +67 -0
- package/dist/utils/style-contract-reader.js.map +1 -0
- package/package.json +3 -3
package/dist/tools/whoami.js
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { getAuthData, setAuthData } from '../auth/state.js';
|
|
11
11
|
import { isMasterAccount, PREMIUM_THEMES } from '../auth/theme-access.js';
|
|
12
12
|
import { addMcpUtmParams } from '../utils/url-utils.js';
|
|
13
|
+
import { getUsageQuotaSnapshot } from '../billing/usage-ledger.js';
|
|
13
14
|
/**
|
|
14
15
|
* whoami 도구 구현
|
|
15
16
|
* 인증된 유저의 tier/라이선스 스냅샷을 반환
|
|
@@ -19,7 +20,7 @@ export async function whoamiTool() {
|
|
|
19
20
|
if (!authData || !authData.valid) {
|
|
20
21
|
return {
|
|
21
22
|
success: false,
|
|
22
|
-
error: '🔐 Authentication required to use FramingUI MCP tools.\n\n
|
|
23
|
+
error: '🔐 Authentication required to use FramingUI MCP tools.\n\n📊 Start with free quota visibility:\n → https://framingui.com/auth/signup?utm_source=mcp&utm_medium=cli&utm_campaign=auth_prompt\n\nAlready have an account? Run `framingui-mcp login`',
|
|
23
24
|
};
|
|
24
25
|
}
|
|
25
26
|
const email = authData.user?.email || '';
|
|
@@ -48,27 +49,27 @@ export async function whoamiTool() {
|
|
|
48
49
|
.reverse();
|
|
49
50
|
latestExpiry = expiryDates[0] || null;
|
|
50
51
|
}
|
|
51
|
-
//
|
|
52
|
-
let
|
|
53
|
-
let
|
|
54
|
-
let
|
|
52
|
+
// Transition access is still backed by the legacy trial license type for compatibility.
|
|
53
|
+
let hasTransitionAccess = false;
|
|
54
|
+
let accessExpiresAt = null;
|
|
55
|
+
let accessDaysLeft = null;
|
|
55
56
|
let trialMessage = null;
|
|
56
57
|
if (authData.licenses && authData.licenses.length > 0) {
|
|
57
58
|
const trialLicense = authData.licenses.find(l => l.type === 'trial');
|
|
58
59
|
if (trialLicense) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (
|
|
60
|
+
hasTransitionAccess = true;
|
|
61
|
+
accessExpiresAt = trialLicense.expiresAt || null;
|
|
62
|
+
if (accessExpiresAt) {
|
|
62
63
|
const now = new Date();
|
|
63
|
-
const expiryDate = new Date(
|
|
64
|
+
const expiryDate = new Date(accessExpiresAt);
|
|
64
65
|
const diffMs = expiryDate.getTime() - now.getTime();
|
|
65
|
-
|
|
66
|
-
if (
|
|
67
|
-
trialMessage = `You have ${
|
|
66
|
+
accessDaysLeft = Math.max(0, Math.ceil(diffMs / (1000 * 60 * 60 * 24)));
|
|
67
|
+
if (accessDaysLeft > 0) {
|
|
68
|
+
trialMessage = `You have ${accessDaysLeft} day${accessDaysLeft !== 1 ? 's' : ''} left in your transition access window.`;
|
|
68
69
|
}
|
|
69
70
|
else {
|
|
70
71
|
const pricingUrl = addMcpUtmParams('https://framingui.com/pricing', 'whoami');
|
|
71
|
-
trialMessage = `Your
|
|
72
|
+
trialMessage = `Your transition access window has expired. Upgrade to continue using premium themes: ${pricingUrl}`;
|
|
72
73
|
}
|
|
73
74
|
}
|
|
74
75
|
}
|
|
@@ -83,10 +84,19 @@ export async function whoamiTool() {
|
|
|
83
84
|
expiresAt: latestExpiry,
|
|
84
85
|
renewable: true,
|
|
85
86
|
},
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
87
|
+
has_transition_access: hasTransitionAccess,
|
|
88
|
+
access_expires_at: accessExpiresAt,
|
|
89
|
+
access_days_left: accessDaysLeft,
|
|
90
|
+
// Legacy aliases kept until downstream clients stop reading trial_* keys.
|
|
91
|
+
is_trial: hasTransitionAccess,
|
|
92
|
+
trial_expires_at: accessExpiresAt,
|
|
93
|
+
trial_days_left: accessDaysLeft,
|
|
94
|
+
quota: getUsageQuotaSnapshot({
|
|
95
|
+
userId: authData.user?.id ?? null,
|
|
96
|
+
plan: isMaster ? 'master' : (authData.user?.plan ?? 'free'),
|
|
97
|
+
paidQuotaEntitlement: authData.quotaEntitlement ?? null,
|
|
98
|
+
}),
|
|
99
|
+
paid_quota_entitlement: authData.quotaEntitlement ?? null,
|
|
90
100
|
...(trialMessage && { message: trialMessage }),
|
|
91
101
|
};
|
|
92
102
|
}
|
package/dist/tools/whoami.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/tools/whoami.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/tools/whoami.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type StyleContract = 'framingui-native' | 'host-utility' | 'mixed' | 'unknown';
|
|
2
|
+
export interface StyleContractResult {
|
|
3
|
+
styleContract: StyleContract;
|
|
4
|
+
cssFilesChecked: string[];
|
|
5
|
+
uiStylesImportFound: boolean;
|
|
6
|
+
definedVariables: string[];
|
|
7
|
+
missingVariables: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare function readStyleContract(projectPath: string): StyleContractResult;
|
|
10
|
+
//# sourceMappingURL=style-contract-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-contract-reader.d.ts","sourceRoot":"","sources":["../../src/utils/style-contract-reader.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG,kBAAkB,GAAG,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AAEtF,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,aAAa,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAaD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAgD1E"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const COMMON_CSS_ENTRY_CANDIDATES = [
|
|
4
|
+
'app/globals.css',
|
|
5
|
+
'src/app/globals.css',
|
|
6
|
+
'styles/globals.css',
|
|
7
|
+
'src/index.css',
|
|
8
|
+
'src/main.css',
|
|
9
|
+
'index.css',
|
|
10
|
+
];
|
|
11
|
+
const REQUIRED_FRAMINGUI_VARIABLES = ['--bg-background', '--border-default', '--text-tertiary'];
|
|
12
|
+
export function readStyleContract(projectPath) {
|
|
13
|
+
const root = resolveProjectRoot(projectPath);
|
|
14
|
+
const cssFilesChecked = COMMON_CSS_ENTRY_CANDIDATES.map(candidate => path.join(root, candidate)).filter(candidate => fs.existsSync(candidate));
|
|
15
|
+
if (cssFilesChecked.length === 0) {
|
|
16
|
+
return {
|
|
17
|
+
styleContract: 'unknown',
|
|
18
|
+
cssFilesChecked: [],
|
|
19
|
+
uiStylesImportFound: false,
|
|
20
|
+
definedVariables: [],
|
|
21
|
+
missingVariables: [...REQUIRED_FRAMINGUI_VARIABLES],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const contents = cssFilesChecked
|
|
25
|
+
.map(filePath => {
|
|
26
|
+
try {
|
|
27
|
+
return fs.readFileSync(filePath, 'utf-8');
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return '';
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
.join('\n');
|
|
34
|
+
const uiStylesImportFound = /@import\s+['"]@framingui\/ui\/styles['"]/.test(contents);
|
|
35
|
+
const definedVariables = REQUIRED_FRAMINGUI_VARIABLES.filter(variable => new RegExp(`${escapeRegExp(variable)}\\s*:`).test(contents));
|
|
36
|
+
const missingVariables = REQUIRED_FRAMINGUI_VARIABLES.filter(variable => !definedVariables.includes(variable));
|
|
37
|
+
let styleContract = 'host-utility';
|
|
38
|
+
if (uiStylesImportFound || missingVariables.length === 0) {
|
|
39
|
+
styleContract = 'framingui-native';
|
|
40
|
+
}
|
|
41
|
+
else if (definedVariables.length > 0) {
|
|
42
|
+
styleContract = 'mixed';
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
styleContract,
|
|
46
|
+
cssFilesChecked,
|
|
47
|
+
uiStylesImportFound,
|
|
48
|
+
definedVariables,
|
|
49
|
+
missingVariables,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function resolveProjectRoot(projectPath) {
|
|
53
|
+
const normalizedPath = path.resolve(projectPath);
|
|
54
|
+
try {
|
|
55
|
+
if (fs.statSync(normalizedPath).isDirectory()) {
|
|
56
|
+
return normalizedPath;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Fall through and derive root from the provided path.
|
|
61
|
+
}
|
|
62
|
+
return path.dirname(normalizedPath);
|
|
63
|
+
}
|
|
64
|
+
function escapeRegExp(value) {
|
|
65
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=style-contract-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-contract-reader.js","sourceRoot":"","sources":["../../src/utils/style-contract-reader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAY7B,MAAM,2BAA2B,GAAG;IAClC,iBAAiB;IACjB,qBAAqB;IACrB,oBAAoB;IACpB,eAAe;IACf,cAAc;IACd,WAAW;CACZ,CAAC;AAEF,MAAM,4BAA4B,GAAG,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;AAEhG,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,IAAI,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAClE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAC3B,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhD,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,aAAa,EAAE,SAAS;YACxB,eAAe,EAAE,EAAE;YACnB,mBAAmB,EAAE,KAAK;YAC1B,gBAAgB,EAAE,EAAE;YACpB,gBAAgB,EAAE,CAAC,GAAG,4BAA4B,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,eAAe;SAC7B,GAAG,CAAC,QAAQ,CAAC,EAAE;QACd,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,mBAAmB,GAAG,0CAA0C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtF,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CACtE,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAC5D,CAAC;IACF,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,MAAM,CAC1D,QAAQ,CAAC,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACjD,CAAC;IAEF,IAAI,aAAa,GAAkB,cAAc,CAAC;IAClD,IAAI,mBAAmB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,aAAa,GAAG,kBAAkB,CAAC;IACrC,CAAC;SAAM,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,aAAa,GAAG,OAAO,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,aAAa;QACb,eAAe;QACf,mBAAmB;QACnB,gBAAgB;QAChB,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAEjD,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC9C,OAAO,cAAc,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,uDAAuD;IACzD,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@framingui/mcp-server",
|
|
3
|
-
"version": "0.6.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.6.28",
|
|
4
|
+
"description": "FramingUI MCP server for production UI workflows, discovery, validation, and quota-aware billing visibility",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@babel/parser": "^7.28.6",
|
|
52
52
|
"@babel/traverse": "^7.28.6",
|
|
53
53
|
"@framingui/core": "^0.4.3",
|
|
54
|
-
"@framingui/ui": "^0.6.
|
|
54
|
+
"@framingui/ui": "^0.6.11",
|
|
55
55
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
56
56
|
"zod": "^3.23.8"
|
|
57
57
|
},
|