Skip to main content
Glama

MCP Agent - AI Expense Tracker

by dev-muhammad
EntitySelector.tsx•3.23 kB
'use client' import * as React from 'react' import { Select, SelectTrigger, SelectValue, SelectContent, SelectItem } from '@/components/ui/select' import { useStore } from '@/store' import { useQueryState } from 'nuqs' import Icon from '@/components/ui/icon' import { useEffect } from 'react' import useChatActions from '@/hooks/useChatActions' export function EntitySelector() { const { mode, agents, teams, setMessages, setSelectedModel } = useStore() const { focusChatInput } = useChatActions() const [agentId, setAgentId] = useQueryState('agent', { parse: (value) => value || undefined, history: 'push' }) const [teamId, setTeamId] = useQueryState('team', { parse: (value) => value || undefined, history: 'push' }) const [, setSessionId] = useQueryState('session') const currentEntities = mode === 'team' ? teams : agents const currentValue = mode === 'team' ? teamId : agentId const placeholder = mode === 'team' ? 'Select Team' : 'Select Agent' useEffect(() => { if (currentValue && currentEntities.length > 0) { const entity = currentEntities.find((item) => item.id === currentValue) if (entity) { setSelectedModel(entity.model?.model || '') if (mode === 'team') { setTeamId(entity.id) } if (entity.model?.model) { focusChatInput() } } } // eslint-disable-next-line react-hooks/exhaustive-deps }, [currentValue, currentEntities, setSelectedModel, mode]) const handleOnValueChange = (value: string) => { const newValue = value === currentValue ? null : value const selectedEntity = currentEntities.find((item) => item.id === newValue) setSelectedModel(selectedEntity?.model?.provider || '') if (mode === 'team') { setTeamId(newValue) setAgentId(null) } else { setAgentId(newValue) setTeamId(null) } setMessages([]) setSessionId(null) if (selectedEntity?.model?.provider) { focusChatInput() } } if (currentEntities.length === 0) { return ( <Select disabled> <SelectTrigger className="h-9 w-full rounded-xl border border-primary/15 bg-primaryAccent text-xs font-medium uppercase opacity-50"> <SelectValue placeholder={`No ${mode}s Available`} /> </SelectTrigger> </Select> ) } return ( <Select value={currentValue || ''} onValueChange={(value) => handleOnValueChange(value)} > <SelectTrigger className="h-9 w-full rounded-xl border border-primary/15 bg-primaryAccent text-xs font-medium uppercase"> <SelectValue placeholder={placeholder} /> </SelectTrigger> <SelectContent className="border-none bg-primaryAccent font-dmmono shadow-lg"> {currentEntities.map((entity, index) => ( <SelectItem className="cursor-pointer" key={`${entity.id}-${index}`} value={entity.id} > <div className="flex items-center gap-3 text-xs font-medium uppercase"> <Icon type={'user'} size="xs" /> {entity.name || entity.id} </div> </SelectItem> ))} </SelectContent> </Select> ) }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/dev-muhammad/MCPAgent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server