Skip to main content
Glama
Dilane-Kamga

BRVM MCP Server

by Dilane-Kamga

get_company_info

Retrieve company name, country, sector, and market cap for a BRVM-listed stock by providing its ticker symbol.

Instructions

Get detailed information about a BRVM-listed company.

Args: ticker: The BRVM ticker symbol.

Returns company name, country, sector, and market cap.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
tickerYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Implementation Reference

  • The MCP tool handler function 'get_company_info' — decorated with @mcp.tool(). Accepts a ticker string, calls scraper.get_company_info(ticker), and returns JSON with company name, country, sector, and market cap.
    @mcp.tool()
    async def get_company_info(ticker: str) -> str:
        """
        Get detailed information about a BRVM-listed company.
    
        Args:
            ticker: The BRVM ticker symbol.
    
        Returns company name, country, sector, and market cap.
        """
        assert scraper
    
        info = await scraper.get_company_info(ticker)
        if not info:
            return json.dumps(
                {"error": f"Company '{ticker}' not found. Use search_stocks to browse available companies."}
            )
        return json.dumps(info.model_dump(), ensure_ascii=False, indent=2)
  • The scraper method 'get_company_info' that looks up the ticker in TICKER_REGISTRY, fetches a live quote, and constructs a CompanyInfo object.
    async def get_company_info(self, ticker: str) -> CompanyInfo | None:
        """Get static company info, enriched from registry + live data."""
        ticker = ticker.upper().strip()
        registry = TICKER_REGISTRY.get(ticker)
        if not registry:
            return None
    
        quote = await self.get_quote(ticker)
    
        return CompanyInfo(
            ticker=ticker,
            name=registry[0],
            country=registry[1],
            sector=registry[2],
            market_cap=quote.market_cap if quote else None,
        )
  • The CompanyInfo Pydantic model used as the return type for company info — includes ticker, name, country, sector, listing_section, isin, market_cap, description.
    class CompanyInfo(BaseModel):
        """Static company information."""
    
        ticker: str
        name: str
        country: str
        sector: str
        listing_section: str = Field("", description="BRVM listing section (1st or 2nd)")
        isin: str = Field("", description="ISIN code if available")
        market_cap: float | None = None
        description: str = ""
  • The FastMCP server instance 'mcp' to which 'get_company_info' is registered via the @mcp.tool() decorator.
    mcp = FastMCP(
  • The TICKER_REGISTRY dictionary that maps ticker symbols to (company_name, country, sector) tuples, which the scraper's get_company_info uses to enrich the response.
    TICKER_REGISTRY: dict[str, tuple[str, str, str]] = {
        "ABJC": ("Servair Abidjan Côte d'Ivoire", "Côte d'Ivoire", "Distribution"),
        "BICB": ("BIIC Bénin", "Bénin", "Services Financiers"),
        "BICC": ("BICI Côte d'Ivoire", "Côte d'Ivoire", "Services Financiers"),
        "BNBC": ("Bernabé Côte d'Ivoire", "Côte d'Ivoire", "Distribution"),
        "BOAB": ("Bank of Africa Bénin", "Bénin", "Services Financiers"),
        "BOABF": ("Bank of Africa Burkina Faso", "Burkina Faso", "Services Financiers"),
        "BOAC": ("Bank of Africa Côte d'Ivoire", "Côte d'Ivoire", "Services Financiers"),
        "BOAM": ("Bank of Africa Mali", "Mali", "Services Financiers"),
        "BOAN": ("Bank of Africa Niger", "Niger", "Services Financiers"),
        "BOAS": ("Bank of Africa Sénégal", "Sénégal", "Services Financiers"),
        "CABC": ("Sicable Côte d'Ivoire", "Côte d'Ivoire", "Industrie"),
        "CBIBF": ("Coris Bank International", "Burkina Faso", "Services Financiers"),
        "CFAC": ("CFAO Motors Côte d'Ivoire", "Côte d'Ivoire", "Distribution"),
        "CIEC": ("CIE Côte d'Ivoire", "Côte d'Ivoire", "Services Publics"),
        "ECOC": ("Ecobank Côte d'Ivoire", "Côte d'Ivoire", "Services Financiers"),
        "ETIT": ("Ecobank Transnational Inc.", "Togo", "Services Financiers"),
        "FTSC": ("Filtisac Côte d'Ivoire", "Côte d'Ivoire", "Industrie"),
        "LNBB": ("Loterie Nationale du Bénin", "Bénin", "Distribution"),
        "NEIC": ("NEI-CEDA Côte d'Ivoire", "Côte d'Ivoire", "Distribution"),
        "NSBC": ("NSIA Banque Côte d'Ivoire", "Côte d'Ivoire", "Services Financiers"),
        "NTLC": ("Nestlé Côte d'Ivoire", "Côte d'Ivoire", "Industrie"),
        "ONTBF": ("Onatel Burkina Faso", "Burkina Faso", "Services Publics"),
        "ORAC": ("Orange Côte d'Ivoire", "Côte d'Ivoire", "Services Publics"),
        "ORGT": ("Oragroup Togo", "Togo", "Services Financiers"),
        "PALC": ("Palm Côte d'Ivoire", "Côte d'Ivoire", "Agriculture"),
        "PRSC": ("Tractafric Motors Côte d'Ivoire", "Côte d'Ivoire", "Distribution"),
        "SAFC": ("Safca Côte d'Ivoire", "Côte d'Ivoire", "Services Financiers"),
        "SCRC": ("Sucrivoire Côte d'Ivoire", "Côte d'Ivoire", "Agriculture"),
        "SDCC": ("SODE Côte d'Ivoire", "Côte d'Ivoire", "Services Publics"),
        "SDSC": ("Bolloré Transport & Logistics", "Côte d'Ivoire", "Transport"),
        "SEMC": ("Eviosys Packaging SIEM", "Côte d'Ivoire", "Industrie"),
        "SGBC": ("Société Générale CI", "Côte d'Ivoire", "Services Financiers"),
        "SHEC": ("Vivo Energy Côte d'Ivoire", "Côte d'Ivoire", "Distribution"),
        "SIBC": ("Société Ivoirienne de Banque", "Côte d'Ivoire", "Services Financiers"),
        "SICC": ("Sicor Côte d'Ivoire", "Côte d'Ivoire", "Agriculture"),
        "SIVC": ("Air Liquide Côte d'Ivoire", "Côte d'Ivoire", "Industrie"),
        "SLBC": ("Solibra Côte d'Ivoire", "Côte d'Ivoire", "Industrie"),
        "SMBC": ("SMB Côte d'Ivoire", "Côte d'Ivoire", "Industrie"),
        "SNTS": ("Sonatel Sénégal", "Sénégal", "Services Publics"),
        "SOGC": ("Sogb Côte d'Ivoire", "Côte d'Ivoire", "Agriculture"),
        "SPHC": ("SAPH Côte d'Ivoire", "Côte d'Ivoire", "Agriculture"),
        "STAC": ("Setao Côte d'Ivoire", "Côte d'Ivoire", "Industrie"),
        "STBC": ("Sitab Côte d'Ivoire", "Côte d'Ivoire", "Industrie"),
        "TTLC": ("Total Énergies CI", "Côte d'Ivoire", "Distribution"),
        "TTLS": ("Total Énergies Sénégal", "Sénégal", "Distribution"),
        "UNLC": ("Unilever Côte d'Ivoire", "Côte d'Ivoire", "Industrie"),
        "UNXC": ("Uniwax Côte d'Ivoire", "Côte d'Ivoire", "Industrie"),
    }
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must convey all behavioral traits. It describes a read operation but fails to mention any restrictions, side effects, or rate limits. The description is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two sentences plus a bullet list. Every word carries weight. No repetition or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description need not detail return structure. It lists core fields (name, country, sector, market cap) adequately. Lacks error handling info but acceptable for a simple lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage; the description adds 'The BRVM ticker symbol' for the ticker parameter, which provides exchange context. However, it lacks format examples or constraints like case sensitivity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb 'Get' and the resource 'detailed information about a BRVM-listed company'. The return fields help clarify scope. However, it does not explicitly differentiate from siblings like get_stock_price or get_market_summary, leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like search_stocks or get_stock_price. Lacks any 'when not to use' or context about prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

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/Dilane-Kamga/brvm-mcp-server'

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