Smithery Logo
MCPsSkillsDocsPricing
Login
Smithery Logo

Give agents more agency

Resources

DocumentationPrivacy PolicySystem Status

Company

PricingAboutBlog

Connect

© 2026 Smithery. All rights reserved.

    Starlitnightly

    single-cell-cellphonedb-communication-mapping

    Starlitnightly/single-cell-cellphonedb-communication-mapping
    AI & ML
    834

    About

    SKILL.md

    Install

    Install via Skills CLI

    or add to your agent
    • Claude Code
      Claude Code
    • Codex
      Codex
    • OpenClaw
      OpenClaw
    • Cursor
      Cursor
    • Amp
      Amp
    • GitHub Copilot
      GitHub Copilot
    • Gemini CLI
      Gemini CLI
    • Kilo Code
      Kilo Code
    • Junie
      Junie
    • Replit
      Replit
    • Windsurf
      Windsurf
    • Cline
      Cline
    • Continue
      Continue
    • OpenCode
      OpenCode
    • OpenHands
      OpenHands
    • Roo Code
      Roo Code
    • Augment
      Augment
    • Goose
      Goose
    • Trae
      Trae
    • Zencoder
      Zencoder
    • Antigravity
      Antigravity
    ├─
    ├─
    └─

    About

    Run omicverse's CellPhoneDB v5 wrapper on annotated single-cell data to infer ligand-receptor networks and produce CellChat-style visualisations.

    SKILL.md

    Single-cell CellPhoneDB communication mapping

    Overview

    Apply this skill when a user wants to quantify ligand-receptor communication between annotated single-cell populations and visualize the result with OmicVerse's CellPhoneDB plotting stack. This skill now covers both the original low-level ov.pl.CellChatViz workflow and the newer public plotting APIs:

    • ov.pl.ccc_heatmap(...)
    • ov.pl.ccc_network_plot(...)
    • ov.pl.ccc_stat_plot(...)

    Use the ccc_* functions by default when the goal is to quickly generate publication-ready plots with a stable public API. Drop down to CellChatViz when the user needs method-level control or wants to combine several custom visualizations in one notebook.

    Instructions

    1. Prepare the environment
      • Use an environment with omicverse>=0.2, scanpy, anndata, pandas, matplotlib, seaborn, and CellPhoneDB resources.
      • For the newer visualizations, also ensure these optional plotting dependencies are available when needed:
        • marsilea for heatmap and bubble matrix plotters.
        • mpl-chord-diagram for chord diagrams.
        • networkx for diffusion and network-style plots.
        • adjustText if the user wants improved automatic label repulsion.
      • Activate OmicVerse plotting defaults with ov.plot_set().
    2. Load and validate the annotated AnnData
      • Read the normalized expression matrix with ov.read(...).
      • Keep the communication grouping column clean, categorical, and aligned with the intended identities.
      • Recommended checks:
        celltype_key = "cell_labels"
        assert celltype_key in adata.obs.columns, f"{celltype_key} missing from adata.obs"
        adata.obs[celltype_key] = adata.obs[celltype_key].astype("category").cat.remove_unused_categories()
        assert not adata.obs[celltype_key].isna().any(), f"NaN values found in {celltype_key}"
        min_per_group = adata.obs[celltype_key].value_counts().min()
        if min_per_group < 10:
            print(f"WARNING: smallest group has {min_per_group} cells; sparse groups may destabilize permutations")
        
      • Confirm the matrix is log-normalized before running CellPhoneDB. Raw counts can distort permutation-based significance.
    3. Run CellPhoneDB through OmicVerse
      • Use ov.single.run_cellphonedb_v5(...) and persist the outputs:
        cpdb_results, adata_cpdb = ov.single.run_cellphonedb_v5(
            adata,
            cpdb_file_path="./cellphonedb.zip",
            celltype_key="cell_labels",
            min_cell_fraction=0.005,
            min_genes=200,
            min_cells=3,
            iterations=1000,
            threshold=0.1,
            pvalue=0.05,
            threads=10,
            output_dir="./cpdb_results",
            cleanup_temp=True,
        )
        
      • Save cpdb_results and adata_cpdb so downstream plotting can be repeated without rerunning permutations.
    4. Prefer the new public plotting APIs for standard visualization requests
      • Use ov.pl.ccc_heatmap(...) for matrix-like plots:
        • plot_type="heatmap" for aggregated pathway-level communication.
        • plot_type="focused_heatmap" to highlight stronger interactions after thresholding weak entries.
        • plot_type="dot" or "bubble" for interaction-level summaries.
        • plot_type="pathway_bubble" for pathway-focused Marsilea bubble summaries.
        • plot_type="bubble_lr" for ligand-receptor-pair-specific bubble matrices.
        • plot_type="role_heatmap", "role_network", or "role_network_marsilea" for signaling role summaries.
        • plot_type="diff_heatmap" when comparing two communication AnnData objects.
      • Use ov.pl.ccc_network_plot(...) for graph-like plots:
        • plot_type="circle" or "circle_focused" for global communication networks.
        • plot_type="individual_outgoing" / "individual_incoming" for sender- or receiver-centric circle panels.
        • plot_type="individual" for a single pathway and optionally a selected L-R pair.
        • plot_type="chord" for cell-type-level pathway chords.
        • plot_type="gene_chord" for gene-level chord diagrams across pathway-specific ligand and receptor nodes.
        • plot_type="lr_chord" for specified ligand-receptor pairs.
        • plot_type="diffusion" for pathway similarity and diffusion-style network structure.
        • plot_type="diff_network" when comparing two communication objects.
        • plot_type="bipartite", "arrow", "sigmoid", or "embedding_network" for alternative layouts.
      • Use ov.pl.ccc_stat_plot(...) for statistics and summary panels:
        • plot_type="pathway_summary" to rank pathways by communication strength and significance.
        • plot_type="lr_contribution" to show the dominant ligand-receptor pairs within a pathway.
        • plot_type="scatter" or "role_scatter" to compare outgoing versus incoming signaling roles.
        • plot_type="role_network" or "role_network_marsilea" for matrix-style role summaries.
        • plot_type="sankey" for communication flow summaries.
    5. Use CellChatViz directly when the user needs method-level control
      • Create a stable palette mapping from cell labels:
        color_dict = dict(zip(
            adata.obs["cell_labels"].cat.categories,
            adata.uns["cell_labels_colors"]
        ))
        viz = ov.pl.CellChatViz(adata_cpdb, palette=color_dict)
        
      • Recommended direct workflow:
        • viz.compute_aggregated_network(...) then viz.netVisual_circle(...).
        • viz.compute_pathway_communication(...) then viz.get_significant_pathways_v2(...).
        • viz.netVisual_heatmap_marsilea(...) or viz.netVisual_heatmap_marsilea_focused(...).
        • viz.netVisual_bubble_marsilea(...) for pathway bubbles.
        • viz.netVisual_bubble_lr(...) for selected ligand-receptor pairs.
        • viz.netVisual_chord_cell(...), viz.netVisual_chord_gene(...), and viz.netVisual_chord_LR(...).
        • viz.netVisual_individual(...) for one pathway / one enriched pair.
        • viz.netAnalysis_computeCentrality() followed by role heatmap, scatter, and network plots.
        • viz.netAnalysis_contribution(pathway) for pathway-level pair contribution analysis.
        • viz.netVisual_diffusion(...) for pathway similarity structure.
    6. Highlight the new visualization capabilities clearly
      • The newer additions worth surfacing in answers are:
        • gene_chord: gene-level chord diagrams, not just cell-type-level chords.
        • bubble_lr: Marsilea bubble summaries centered on explicit ligand-receptor pairs.
        • focused_heatmap: thresholded pathway heatmaps that suppress weak interactions.
        • role_network_marsilea: richer role summaries with dendrograms, color bars, and importance bars.
        • diffusion: pathway similarity network based on communication patterns.
        • pathway_summary and lr_contribution: higher-level summary/statistical views for prioritization.
      • When the user says "new visualization", prioritize demonstrating one of these rather than only the legacy circle plot.
    7. Parameter tips for the newer plots
      • For pathway bubbles:
        • group_pathways=True groups by pathway rather than individual L-R pairs.
        • transpose=True is useful when too many cell-pair rows make labels unreadable.
        • add_violin=True can expose score distributions but makes figures denser.
      • For ligand-receptor bubbles:
        • show_all_pairs=True is useful when the user wants to compare a fixed panel of pairs even if some are weak or absent.
        • pair_lr_use or interaction_use should match the pair naming in adata.var.
      • For gene chords:
        • Require adata.var["gene_a"] and adata.var["gene_b"].
        • Use rotate_names=True when genes or cell-type labels are long.
      • For focused heatmaps and focused circle plots:
        • Tune min_interaction_threshold to remove weak edges before plotting.
      • For role plots:
        • Run viz.netAnalysis_computeCentrality() first when using the low-level API.
        • Use pattern="incoming" and pattern="outgoing" separately if the user wants interpretable sender vs receiver programs.
    8. Troubleshooting
      • Metadata alignment: the communication grouping column must be categorical and free of missing values.
      • Database bundle: cpdb_file_path must point to a valid CellPhoneDB v5 SQLite zip.
      • Sparse groups: very small sender or receiver groups often cause unstable or empty outputs.
      • Missing columns in adata.var:
        • classification is needed for pathway-filtered plotting.
        • gene_a and gene_b are needed for gene-level or ligand-receptor-specific plots.
      • Optional dependency errors:
        • install marsilea for pathway_bubble, bubble_lr, focused heatmaps, and role-network Marsilea views.
        • install mpl-chord-diagram for chord plots.
        • install adjustText if label overlap is severe.
      • Palette mismatches: rebuild the palette from sorted categories in adata.obs[celltype_key].cat.categories and the corresponding adata.uns[f"{celltype_key}_colors"].

    Examples

    • "Run CellPhoneDB and then use ov.pl.ccc_heatmap(..., plot_type='focused_heatmap') to show the strongest pathways."
    • "Create a gene-level chord diagram for FGF signaling with ov.pl.ccc_network_plot(..., plot_type='gene_chord')."
    • "Compare selected ligand-receptor pairs across sender-receiver combinations with plot_type='bubble_lr'."
    • "Summarize the top pathways and then rank within-pathway ligand-receptor contributions with ccc_stat_plot(..., plot_type='pathway_summary') and plot_type='lr_contribution'."
    • "Use CellChatViz directly to compute centrality and render Marsilea role-network plots."

    References

    • Tutorial notebook: t_cellphonedb.ipynb
    • Example data: omicverse_guide/docs/Tutorials-single/data/cpdb/
    • Quick copy/paste commands: reference.md
    Recommended Servers
    Blockscout MCP Server
    Blockscout MCP Server
    Maximum Sats
    Maximum Sats
    ThinAir Data
    ThinAir Data
    Repository
    starlitnightly/omicverse
    Files