@alpic-ai/api 0.0.0-staging.c8c7834 → 0.0.0-staging.c8dc87b
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/dist/index.mjs +38 -7
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -99,6 +99,8 @@ const positiveTestCaseSchema = z.object({
|
|
|
99
99
|
toolTriggered: z.string().optional(),
|
|
100
100
|
expectedOutput: z.string().optional()
|
|
101
101
|
}).partial().describe("Each case: Scenario, User prompt, Tool triggered, Expected output.");
|
|
102
|
+
/** Accepts either a valid email or URL. */
|
|
103
|
+
const supportChannelSchema = z.string().refine((value) => z.email().safeParse(value).success || z.url().safeParse(value).success, { error: "Must be a valid email or URL" });
|
|
102
104
|
const chatgptCategorySchema = z.enum([
|
|
103
105
|
"BUSINESS",
|
|
104
106
|
"COLLABORATION",
|
|
@@ -144,7 +146,7 @@ const chatgptSubmissionFormDataSchema = z.object({
|
|
|
144
146
|
category: chatgptCategorySchema.describe("Category from the OpenAI taxonomy."),
|
|
145
147
|
developerName: z.string().describe("Developer name shown publicly on the app's directory page."),
|
|
146
148
|
companyUrl: z.url().describe("Your company's main website URL."),
|
|
147
|
-
supportChannel:
|
|
149
|
+
supportChannel: supportChannelSchema.describe("Customer support URL or email address."),
|
|
148
150
|
privacyPolicyUrl: z.url().describe("URL to your privacy policy."),
|
|
149
151
|
termsOfServiceUrl: z.url().describe("URL to the app's terms of service."),
|
|
150
152
|
demoRecordingUrl: z.url().describe("URL to a video demonstrating the app, recorded via OpenAI Developer Mode. Cover all main use cases on web, iOS, and Android."),
|
|
@@ -159,6 +161,13 @@ const chatgptSubmissionFormDataSchema = z.object({
|
|
|
159
161
|
translations: z.array(chatgptTranslationSchema).describe("Per-locale translation of tagline + description. English (US) is the default."),
|
|
160
162
|
allowedCountries: chatgptAllowedCountriesSchema.describe("'Allow all' or restrict to a specific list. See OpenAI's supported countries list."),
|
|
161
163
|
releaseNotes: z.string().describe("Publicly displayed on the app details page.")
|
|
164
|
+
});
|
|
165
|
+
chatgptSubmissionFormDataSchema.pick({
|
|
166
|
+
appName: true,
|
|
167
|
+
developerName: true,
|
|
168
|
+
serverUrl: true,
|
|
169
|
+
tools: true,
|
|
170
|
+
authentication: true
|
|
162
171
|
}).partial();
|
|
163
172
|
const claudeCategorySchema = z.enum([
|
|
164
173
|
"Business & Productivity",
|
|
@@ -213,13 +222,24 @@ const claudeSubmissionFormDataSchema = z.object({
|
|
|
213
222
|
primaryContactEmail: z.email().describe("Business email for the primary contact. Must be a valid email address. Anthropic uses this to communicate about your submission status, required changes, and post-listing issues. Avoid using personal email addresses."),
|
|
214
223
|
primaryContactRole: z.string().optional().describe("The job title or role of the primary contact (e.g. 'CTO', 'Developer Relations Lead', 'Founder'). Optional but helps Anthropic route questions to the right person."),
|
|
215
224
|
anthropicPointOfContact: z.string().optional().describe("If you have a direct contact at Anthropic (e.g. from a partnership or sales conversation), enter their name here. This is optional but can greatly help expedite the review process. Leave blank if you don't have one."),
|
|
216
|
-
appName: z.string().describe(
|
|
225
|
+
appName: z.string().describe(`The public display name for your connector as it will appear in the Connectors Directory.
|
|
226
|
+
|
|
227
|
+
Rules:
|
|
228
|
+
(1) Do NOT include the words 'MCP' or 'Server' — these are auto-rejected.
|
|
229
|
+
(2) Use your brand/product name, e.g. 'Notion', 'Linear', 'Slack'.
|
|
230
|
+
(3) You must own or have the right to use this brand name. For example, don't call it 'Google Drive Helper' if you're not Google.`),
|
|
217
231
|
mcpUrlType: claudeMcpUrlTypeSchema.describe("Universal URL = one URL serves all users. Custom MCP URLs = signup URL + regex matching per-user URLs."),
|
|
218
232
|
serverUrl: z.url().describe("Production MCP server URL (https). Derived from the project's production environment by default."),
|
|
219
233
|
tagline: z.string().max(55).describe("Short blurb shown below the server name. 55 chars max."),
|
|
220
234
|
description: z.string().describe("50–100 words describing what the server does and its key capabilities. Lives on the directory listing."),
|
|
221
235
|
testCases: z.array(positiveTestCaseSchema).describe("At least 3 use cases with example prompts showing the value of the connector."),
|
|
222
|
-
connectionRequirements: z.string().describe(
|
|
236
|
+
connectionRequirements: z.string().describe(`Prerequisites before connecting:
|
|
237
|
+
• Free/premium account
|
|
238
|
+
• Admin seat
|
|
239
|
+
• Geographic availability
|
|
240
|
+
• Custom instance URL
|
|
241
|
+
|
|
242
|
+
State 'No special requirements.' if none.`),
|
|
223
243
|
readWriteCapabilities: claudeReadWriteCapabilitiesSchema.describe("Inferred from the `readOnlyHint` annotations on the MCP tools."),
|
|
224
244
|
isMcpApp: z.boolean().describe("True if the server exposes interactive UI elements (widgets). Inferred from the MCP connection."),
|
|
225
245
|
thirdPartyConnectionsAndWebAccess: z.array(claudeThirdPartySchema).describe("Multi-select of what the server reaches out to (web, third-party AI, data aggregators)."),
|
|
@@ -230,12 +250,23 @@ const claudeSubmissionFormDataSchema = z.object({
|
|
|
230
250
|
transportSupport: z.array(claudeTransportSchema).describe("Multi-select of transport protocols the server supports. Anthropic recommends Streamable HTTP (SSE may be deprecated later this year)."),
|
|
231
251
|
serverDocumentationLink: z.url().describe("Public docs URL covering what the MCP does, setup, debugging, and self-serve support. The Alpic playground may be used."),
|
|
232
252
|
privacyPolicyUrl: z.url().describe("URL to your privacy policy. Mandatory and displayed alongside the directory listing."),
|
|
233
|
-
supportChannel:
|
|
253
|
+
supportChannel: supportChannelSchema.describe("Link or email for user support (help center, GitHub issues, docs, support@…). Displayed alongside the directory listing."),
|
|
234
254
|
testingCredentials: z.string().describe("Credentials for reviewers to verify functionality. Required if the server uses OAuth. No 2FA. Use mcp-review@anthropic.com if an accessible email is needed."),
|
|
235
255
|
tools: z.array(toolDefinitionSchema).describe("List of tools exposed by the MCP server (auto-populated from the production server's manifest)."),
|
|
236
256
|
toolTitlesAnnotationsConfirmed: z.boolean().describe("Confirmation that all tools have user-friendly titles and accurate annotations (readOnlyHint, destructiveHint, …)."),
|
|
237
257
|
logoLight: z.string().describe("Server/app logo for light mode. Square 1:1 aspect ratio. SVG preferred for Claude."),
|
|
238
258
|
screenshots: z.array(z.url()).describe("URLs of screenshots of the connector on Claude.ai or promo material. 3–5 ideal. ≥1000px width preferred, PNG, cropped to the app response. Videos welcome.")
|
|
259
|
+
});
|
|
260
|
+
claudeSubmissionFormDataSchema.pick({
|
|
261
|
+
companyName: true,
|
|
262
|
+
appName: true,
|
|
263
|
+
mcpUrlType: true,
|
|
264
|
+
serverUrl: true,
|
|
265
|
+
tools: true,
|
|
266
|
+
readWriteCapabilities: true,
|
|
267
|
+
transportSupport: true,
|
|
268
|
+
primaryContactEmail: true,
|
|
269
|
+
primaryContactName: true
|
|
239
270
|
}).partial();
|
|
240
271
|
const submissionMetaFieldsSchema = z.object({
|
|
241
272
|
id: z.string(),
|
|
@@ -245,14 +276,14 @@ const submissionMetaFieldsSchema = z.object({
|
|
|
245
276
|
});
|
|
246
277
|
const claudeSubmissionSchemaInternal = submissionMetaFieldsSchema.extend({
|
|
247
278
|
platform: z.literal("claudeai"),
|
|
248
|
-
formData: claudeSubmissionFormDataSchema
|
|
279
|
+
formData: claudeSubmissionFormDataSchema.partial()
|
|
249
280
|
});
|
|
250
281
|
const chatgptSubmissionSchemaInternal = submissionMetaFieldsSchema.extend({
|
|
251
282
|
platform: z.literal("chatgpt"),
|
|
252
|
-
formData: chatgptSubmissionFormDataSchema
|
|
283
|
+
formData: chatgptSubmissionFormDataSchema.partial()
|
|
253
284
|
});
|
|
254
285
|
z.discriminatedUnion("platform", [claudeSubmissionSchemaInternal, chatgptSubmissionSchemaInternal]);
|
|
255
|
-
z.union([claudeSubmissionFormDataSchema, chatgptSubmissionFormDataSchema]);
|
|
286
|
+
z.union([claudeSubmissionFormDataSchema.partial(), chatgptSubmissionFormDataSchema.partial()]);
|
|
256
287
|
const subscriptionPlanSchema = z.enum([
|
|
257
288
|
"pro",
|
|
258
289
|
"business",
|