openhive-mcp-server 1.2.0 → 1.4.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/index.js +91 -2
- package/package.json +2 -2
package/index.js
CHANGED
|
@@ -53,7 +53,7 @@ async function apiRequest(path, options = {}) {
|
|
|
53
53
|
return data.data;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
const server = new McpServer({ name: 'openhive', version: '1.
|
|
56
|
+
const server = new McpServer({ name: 'openhive', version: '1.4.0' });
|
|
57
57
|
|
|
58
58
|
// ── Posts ──
|
|
59
59
|
|
|
@@ -681,6 +681,87 @@ server.tool(
|
|
|
681
681
|
}
|
|
682
682
|
);
|
|
683
683
|
|
|
684
|
+
// ── Design Systems (visual inspirations library) ──
|
|
685
|
+
|
|
686
|
+
server.tool(
|
|
687
|
+
'list_design_systems',
|
|
688
|
+
'Lista a biblioteca de 58 design systems de marcas conhecidas (Stripe, Linear, Apple, Notion, etc) que podem ser usados como inspiracao visual para criar brands. Cada item retorna nome, vibe, categoria, paleta principal e mood keywords. Use isso quando o usuario pedir ajuda para criar um brand do zero ou refinar a identidade visual',
|
|
689
|
+
{
|
|
690
|
+
category: z.enum(['fintech', 'productivity', 'dev-tools', 'ai', 'luxury', 'automotive', 'social', 'media', 'other']).optional().describe('Filtrar por categoria'),
|
|
691
|
+
search: z.string().optional().describe('Buscar por nome, vibe ou mood keyword (ex: warm, dark, minimal)'),
|
|
692
|
+
limit: z.number().optional().describe('Quantidade maxima a retornar'),
|
|
693
|
+
},
|
|
694
|
+
async (input) => {
|
|
695
|
+
const params = new URLSearchParams();
|
|
696
|
+
if (input.category) params.set('category', input.category);
|
|
697
|
+
if (input.search) params.set('search', input.search);
|
|
698
|
+
if (input.limit) params.set('limit', String(input.limit));
|
|
699
|
+
const qs = params.toString();
|
|
700
|
+
const result = await apiRequest(`/api/design-systems${qs ? '?' + qs : ''}`);
|
|
701
|
+
return {
|
|
702
|
+
content: [{
|
|
703
|
+
type: 'text',
|
|
704
|
+
text: JSON.stringify({
|
|
705
|
+
total_in_library: result.totalAvailable,
|
|
706
|
+
returned: result.total,
|
|
707
|
+
design_systems: result.items.map((d) => ({
|
|
708
|
+
id: d.id,
|
|
709
|
+
name: d.name,
|
|
710
|
+
vibe: d.vibe,
|
|
711
|
+
category: d.category,
|
|
712
|
+
mood_keywords: d.moodKeywords,
|
|
713
|
+
primary_color: d.colors.primary,
|
|
714
|
+
secondary_color: d.colors.secondary,
|
|
715
|
+
})),
|
|
716
|
+
}, null, 2),
|
|
717
|
+
}],
|
|
718
|
+
};
|
|
719
|
+
}
|
|
720
|
+
);
|
|
721
|
+
|
|
722
|
+
server.tool(
|
|
723
|
+
'get_design_system',
|
|
724
|
+
'Retorna detalhes completos de um design system especifico (todas as cores, tipografia, principios). Use depois de list_design_systems quando o usuario escolher uma inspiracao',
|
|
725
|
+
{
|
|
726
|
+
design_system_id: z.string().describe('ID do design system (ex: stripe, linear, apple)'),
|
|
727
|
+
},
|
|
728
|
+
async (input) => {
|
|
729
|
+
const result = await apiRequest(`/api/design-systems/${input.design_system_id}`);
|
|
730
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
731
|
+
}
|
|
732
|
+
);
|
|
733
|
+
|
|
734
|
+
server.tool(
|
|
735
|
+
'list_design_system_categories',
|
|
736
|
+
'Retorna as categorias disponiveis na biblioteca de design systems com a quantidade em cada (fintech, dev-tools, ai, etc)',
|
|
737
|
+
{},
|
|
738
|
+
async () => {
|
|
739
|
+
const result = await apiRequest('/api/design-systems/categories');
|
|
740
|
+
return { content: [{ type: 'text', text: JSON.stringify({ categories: result }, null, 2) }] };
|
|
741
|
+
}
|
|
742
|
+
);
|
|
743
|
+
|
|
744
|
+
server.tool(
|
|
745
|
+
'suggest_brand_from_inspirations',
|
|
746
|
+
'Combina 1-5 design systems da biblioteca em uma sugestao de brand. Retorna paleta de cores, fonte, tom de voz e descricao. NAO salva nada - apenas sugere. Para salvar use create_brand depois que o usuario aprovar',
|
|
747
|
+
{
|
|
748
|
+
inspiration_ids: z.array(z.string()).min(1).max(5).describe('IDs dos design systems para combinar (ex: ["stripe", "linear"])'),
|
|
749
|
+
business_name: z.string().optional().describe('Nome do negocio do usuario'),
|
|
750
|
+
business_type: z.string().optional().describe('Tipo de negocio (ex: "AI startup", "fintech")'),
|
|
751
|
+
},
|
|
752
|
+
async (input) => {
|
|
753
|
+
const result = await apiRequest('/api/design-systems/suggest', {
|
|
754
|
+
method: 'POST',
|
|
755
|
+
body: JSON.stringify({
|
|
756
|
+
inspirationIds: input.inspiration_ids,
|
|
757
|
+
businessName: input.business_name,
|
|
758
|
+
businessType: input.business_type,
|
|
759
|
+
}),
|
|
760
|
+
});
|
|
761
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
762
|
+
}
|
|
763
|
+
);
|
|
764
|
+
|
|
684
765
|
// ── Brands ──
|
|
685
766
|
|
|
686
767
|
server.tool('list_brands', 'Lista todos os brands cadastrados (identidade visual: logo, cores, produtos, tom de voz). Use ANTES de criar qualquer post visual para perguntar ao usuario qual brand aplicar', {}, async () => {
|
|
@@ -700,7 +781,7 @@ server.tool('get_default_brand', 'Retorna o brand padrao do usuario (se houver).
|
|
|
700
781
|
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
701
782
|
});
|
|
702
783
|
|
|
703
|
-
server.tool('create_brand', 'Cria um novo brand com identidade visual', {
|
|
784
|
+
server.tool('create_brand', 'Cria um novo brand com identidade visual. Aceita website_url e instagram_url para que agentes possam pesquisar informacoes da marca', {
|
|
704
785
|
name: z.string().describe('Nome do brand'),
|
|
705
786
|
logo_url: z.string().optional().describe('URL do logo'),
|
|
706
787
|
primary_color: z.string().optional().describe('Cor primaria em hex (#RRGGBB)'),
|
|
@@ -709,6 +790,8 @@ server.tool('create_brand', 'Cria um novo brand com identidade visual', {
|
|
|
709
790
|
font_family: z.string().optional().describe('Familia de fonte preferida'),
|
|
710
791
|
description: z.string().optional().describe('Descricao do brand'),
|
|
711
792
|
voice_tone: z.string().optional().describe('Tom de voz: profissional, descontraido, educativo'),
|
|
793
|
+
website_url: z.string().optional().describe('URL do site oficial - agentes podem visitar para pesquisar informacoes e contexto'),
|
|
794
|
+
instagram_url: z.string().optional().describe('URL do perfil Instagram - agentes podem analisar o estilo visual e de conteudo para manter consistencia'),
|
|
712
795
|
products: z.array(z.string()).optional().describe('Lista de produtos/servicos'),
|
|
713
796
|
default_hashtags: z.array(z.string()).optional().describe('Hashtags padrao a aplicar nos posts'),
|
|
714
797
|
is_default: z.boolean().optional().describe('Se este sera o brand padrao'),
|
|
@@ -722,6 +805,8 @@ server.tool('create_brand', 'Cria um novo brand com identidade visual', {
|
|
|
722
805
|
fontFamily: input.font_family,
|
|
723
806
|
description: input.description,
|
|
724
807
|
voiceTone: input.voice_tone,
|
|
808
|
+
websiteUrl: input.website_url,
|
|
809
|
+
instagramUrl: input.instagram_url,
|
|
725
810
|
products: input.products,
|
|
726
811
|
defaultHashtags: input.default_hashtags,
|
|
727
812
|
isDefault: input.is_default,
|
|
@@ -742,6 +827,8 @@ server.tool('update_brand', 'Atualiza um brand existente', {
|
|
|
742
827
|
font_family: z.string().optional(),
|
|
743
828
|
description: z.string().optional(),
|
|
744
829
|
voice_tone: z.string().optional(),
|
|
830
|
+
website_url: z.string().optional(),
|
|
831
|
+
instagram_url: z.string().optional(),
|
|
745
832
|
products: z.array(z.string()).optional(),
|
|
746
833
|
default_hashtags: z.array(z.string()).optional(),
|
|
747
834
|
is_default: z.boolean().optional(),
|
|
@@ -755,6 +842,8 @@ server.tool('update_brand', 'Atualiza um brand existente', {
|
|
|
755
842
|
if (input.font_family !== undefined) body.fontFamily = input.font_family;
|
|
756
843
|
if (input.description !== undefined) body.description = input.description;
|
|
757
844
|
if (input.voice_tone !== undefined) body.voiceTone = input.voice_tone;
|
|
845
|
+
if (input.website_url !== undefined) body.websiteUrl = input.website_url;
|
|
846
|
+
if (input.instagram_url !== undefined) body.instagramUrl = input.instagram_url;
|
|
758
847
|
if (input.products !== undefined) body.products = input.products;
|
|
759
848
|
if (input.default_hashtags !== undefined) body.defaultHashtags = input.default_hashtags;
|
|
760
849
|
if (input.is_default !== undefined) body.isDefault = input.is_default;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openhive-mcp-server",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "OpenHive AI MCP Server - Connect Claude, Antigravity, Cursor and other IDEs to your OpenHive instance.
|
|
3
|
+
"version": "1.4.0",
|
|
4
|
+
"description": "OpenHive AI MCP Server - Connect Claude, Antigravity, Cursor and other IDEs to your OpenHive instance. 39 tools including Design Systems library (58 brand inspirations), Brands, Mixed Carousel.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"openhive-mcp": "./index.js"
|