Skip to main content
Glama

MCP Agent - AI Expense Tracker

by dev-muhammad
useChatActions.ts•5.55 kB
import { useCallback } from 'react' import { toast } from 'sonner' import { useStore } from '../store' import { AgentDetails, TeamDetails, type ChatMessage } from '@/types/os' import { getAgentsAPI, getStatusAPI, getTeamsAPI } from '@/api/os' import { useQueryState } from 'nuqs' const useChatActions = () => { const { chatInputRef } = useStore() const selectedEndpoint = useStore((state) => state.selectedEndpoint) const [, setSessionId] = useQueryState('session') const setMessages = useStore((state) => state.setMessages) const setIsEndpointActive = useStore((state) => state.setIsEndpointActive) const setIsEndpointLoading = useStore((state) => state.setIsEndpointLoading) const setAgents = useStore((state) => state.setAgents) const setTeams = useStore((state) => state.setTeams) const setSelectedModel = useStore((state) => state.setSelectedModel) const setMode = useStore((state) => state.setMode) const [agentId, setAgentId] = useQueryState('agent') const [teamId, setTeamId] = useQueryState('team') const [, setDbId] = useQueryState('db_id') const getStatus = useCallback(async () => { try { const status = await getStatusAPI(selectedEndpoint) return status } catch { return 503 } }, [selectedEndpoint]) const getAgents = useCallback(async () => { try { const agents = await getAgentsAPI(selectedEndpoint) return agents } catch { toast.error('Error fetching agents') return [] } }, [selectedEndpoint]) const getTeams = useCallback(async () => { try { const teams = await getTeamsAPI(selectedEndpoint) return teams } catch { toast.error('Error fetching teams') return [] } }, [selectedEndpoint]) const clearChat = useCallback(() => { setMessages([]) setSessionId(null) // eslint-disable-next-line react-hooks/exhaustive-deps }, []) const focusChatInput = useCallback(() => { setTimeout(() => { requestAnimationFrame(() => chatInputRef?.current?.focus()) }, 0) // eslint-disable-next-line react-hooks/exhaustive-deps }, []) const addMessage = useCallback( (message: ChatMessage) => { setMessages((prevMessages) => [...prevMessages, message]) }, [setMessages] ) const initialize = useCallback(async () => { setIsEndpointLoading(true) try { const status = await getStatus() let agents: AgentDetails[] = [] let teams: TeamDetails[] = [] if (status === 200) { setIsEndpointActive(true) teams = await getTeams() agents = await getAgents() console.log(' is active', teams, agents) if (!agentId && !teamId) { const currentMode = useStore.getState().mode console.log('Current mode:', currentMode) if (currentMode === 'team' && teams.length > 0) { const firstTeam = teams[0] setTeamId(firstTeam.id) setSelectedModel(firstTeam.model?.provider || '') setDbId(firstTeam.db_id || '') setAgentId(null) setTeams(teams) } else if (currentMode === 'agent' && agents.length > 0) { const firstAgent = agents[0] setMode('agent') setAgentId(firstAgent.id) setSelectedModel(firstAgent.model?.model || '') setDbId(firstAgent.db_id || '') setAgents(agents) } } else { setAgents(agents) setTeams(teams) if (agentId) { const agent = agents.find((a) => a.id === agentId) if (agent) { setMode('agent') setSelectedModel(agent.model?.model || '') setDbId(agent.db_id || '') setTeamId(null) } else if (agents.length > 0) { const firstAgent = agents[0] setMode('agent') setAgentId(firstAgent.id) setSelectedModel(firstAgent.model?.model || '') setDbId(firstAgent.db_id || '') setTeamId(null) } } else if (teamId) { const team = teams.find((t) => t.id === teamId) if (team) { setMode('team') setSelectedModel(team.model?.provider || '') setDbId(team.db_id || '') setAgentId(null) } else if (teams.length > 0) { const firstTeam = teams[0] setMode('team') setTeamId(firstTeam.id) setSelectedModel(firstTeam.model?.provider || '') setDbId(firstTeam.db_id || '') setAgentId(null) } } } } else { setIsEndpointActive(false) setMode('agent') setSelectedModel('') setAgentId(null) setTeamId(null) } return { agents, teams } } catch (error) { console.error('Error initializing :', error) setIsEndpointActive(false) setMode('agent') setSelectedModel('') setAgentId(null) setTeamId(null) setAgents([]) setTeams([]) } finally { setIsEndpointLoading(false) } }, [ getStatus, getAgents, getTeams, setIsEndpointActive, setIsEndpointLoading, setAgents, setTeams, setAgentId, setSelectedModel, setMode, setTeamId, setDbId, agentId, teamId ]) return { clearChat, addMessage, getAgents, focusChatInput, getTeams, initialize } } export default useChatActions

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