Skip to content

Commit f2740d8

Browse files
authored
feat: add exa mcp (#1041)
1 parent fbccc8b commit f2740d8

File tree

8 files changed

+64
-7
lines changed

8 files changed

+64
-7
lines changed

apps/web/src/app/(private)/settings/_components/Integrations/New/index.tsx

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,6 @@ export default function NewIntegration() {
8888
if (integrationName.includes('/')) {
8989
errors.push('Name cannot contain slashes')
9090
}
91-
if (
92-
integrationName === 'latitude' ||
93-
integrations?.some((integration) => integration.name === integrationName)
94-
) {
95-
errors.push('An integration with this name already exists')
96-
}
9791
return errors.length ? errors : undefined
9892
}, [integrationName, integrations])
9993

apps/web/src/lib/integrationTypeOptions.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,10 @@ export const HOSTED_INTEGRATION_TYPE_OPTIONS: Record<
164164
label: 'Apify',
165165
icon: 'apify',
166166
},
167+
[HostedIntegrationType.Exa]: {
168+
label: 'Exa',
169+
icon: 'exa',
170+
},
167171
}
168172

169173
export function integrationOptions(

packages/constants/src/integrations.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export enum HostedIntegrationType {
3939
Hyperbrowser = 'hyperbrowser',
4040
Audiense = 'audiense',
4141
Apify = 'apify',
42+
Exa = 'exa',
4243

4344
// Require all auth file :point_down:
4445
// Gmail = 'google_drive',

packages/core/src/services/integrations/hostedTypes/configs/audiense.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import { HostedIntegrationConfig } from '../types'
2+
import { npxCommand } from '../utils'
23

34
export default {
45
description: 'Integration for interacting with Audiense',
5-
command: 'node mcps/mcp-audiense-insights/build/index.js',
6+
command: npxCommand({
7+
package: 'github:AudienseCo/mcp-audiense-insights',
8+
}),
69
env: {
710
AUDIENSE_CLIENT_ID: {
811
label: 'Audiense Client ID',
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { HostedIntegrationConfig } from '../types'
2+
import { npxCommand } from '../utils'
3+
4+
const EXA_MCP_CONFIG: HostedIntegrationConfig = {
5+
description: 'Exa MCP Server for web search and data extraction',
6+
command: npxCommand({
7+
package: 'github:exa-labs/exa-mcp-server',
8+
}),
9+
env: {
10+
EXA_API_KEY: {
11+
label: 'API Key',
12+
description: 'The API key for your Exa account',
13+
placeholder: 'your-exa-api-key',
14+
required: true,
15+
},
16+
},
17+
envSource: 'https://dashboard.exa.ai/login?redirect=/api-keys',
18+
}
19+
20+
export default EXA_MCP_CONFIG

packages/core/src/services/integrations/hostedTypes/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import FIGMA_MCP_CONFIG from './configs/figma'
3232
import HYPERBROWSER_MCP_CONFIG from './configs/hyperbrowser'
3333
import AUDIENSE_MCP_CONFIG from './configs/audiense'
3434
import APIFY_MCP_CONFIG from './configs/apify'
35+
import EXA_MCP_CONFIG from './configs/exa'
3536

3637
export const HOSTED_MCP_CONFIGS: Record<
3738
HostedIntegrationType,
@@ -70,4 +71,5 @@ export const HOSTED_MCP_CONFIGS: Record<
7071
[HostedIntegrationType.Hyperbrowser]: HYPERBROWSER_MCP_CONFIG,
7172
[HostedIntegrationType.Audiense]: AUDIENSE_MCP_CONFIG,
7273
[HostedIntegrationType.Apify]: APIFY_MCP_CONFIG,
74+
[HostedIntegrationType.Exa]: EXA_MCP_CONFIG,
7375
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { type LucideProps } from 'lucide-react'
2+
3+
export default function Exa(props: LucideProps) {
4+
return (
5+
<svg
6+
viewBox='0 0 278 100'
7+
fill='none'
8+
xmlns='http://www.w3.org/2000/svg'
9+
{...props}
10+
>
11+
<path
12+
d='M161.632 53.2837H115.472C115.918 66.4186 125.061 72.7596 133.981 72.7596C142.9 72.7596 147.806 68.6833 150.371 62.682H160.851C158.064 73.2126 148.587 81.8182 133.981 81.8182C115.026 81.8182 104.545 68.0039 104.545 50C104.545 30.7506 117.256 18.4083 133.646 18.4083C151.931 18.4083 162.97 34.0343 161.632 53.2837ZM133.646 27.2404C124.615 27.2404 116.476 32.2226 115.584 44.4516H150.928C150.705 35.846 144.35 27.2404 133.646 27.2404Z'
13+
fill='currentColor'
14+
></path>
15+
<path
16+
d='M219.201 19.4274L198.797 48.528L221.208 80.3462H209.055L192.777 57.1336L176.61 80.3462H165.014L187.09 48.9809L166.352 19.4274H178.505L193.111 40.3753L207.829 19.4274H219.201Z'
17+
fill='currentColor'
18+
></path>
19+
<path
20+
d='M266.458 54.869V51.0191C248.061 52.944 236.354 55.6616 236.354 64.0408C236.354 69.8156 240.702 73.6655 247.949 73.6655C257.426 73.6655 266.458 69.2494 266.458 54.869ZM245.719 81.8182C234.458 81.8182 225.092 75.4772 225.092 64.2672C225.092 49.8868 241.036 45.6972 265.677 42.8664V41.3944C265.677 30.2976 259.545 26.561 252.075 26.561C243.712 26.561 238.806 31.2035 238.36 38.6768H227.88C228.883 25.5419 240.256 18.1818 251.963 18.1818C268.465 18.1818 275.935 26.2213 275.823 43.3193L275.712 57.3601C275.6 67.551 276.158 74.5713 277.273 80.3462H267.015C266.681 78.0815 266.346 75.5904 266.235 71.967C262.555 78.1948 256.311 81.8182 245.719 81.8182Z'
21+
fill='currentColor'
22+
></path>
23+
<path
24+
fillRule='evenodd'
25+
clipRule='evenodd'
26+
d='M0 0H78.1818V7.46269L44.8165 50L78.1818 92.5373V100H0V0ZM39.5825 43.1172L66.6956 7.46269H12.4695L39.5825 43.1172ZM8.79612 16.3977V46.2687H31.5111L8.79612 16.3977ZM31.5111 53.7313H8.79612V83.6023L31.5111 53.7313ZM12.4695 92.5373L39.5825 56.8828L66.6956 92.5373H12.4695Z'
27+
fill='currentColor'
28+
></path>
29+
</svg>
30+
)
31+
}

packages/web-ui/src/ds/atoms/Icons/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ import Telegram from './custom-icons/logos/Telegram'
145145
import Tinybird from './custom-icons/logos/Tinybird'
146146
import TwitterX from './custom-icons/logos/TwitterX'
147147
import Wordpress from './custom-icons/logos/Wordpress'
148+
import Exa from './custom-icons/logos/Exa'
148149

149150
const Icons = {
150151
// hubspot: Hubspot,
@@ -288,6 +289,7 @@ const Icons = {
288289
clipboardCheck: ClipboardCheck,
289290
space: Space,
290291
blend: Blend,
292+
exa: Exa,
291293
}
292294

293295
export type IconName = keyof typeof Icons

0 commit comments

Comments
 (0)