MCPymol
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCPYMOL_PORT | No | Port for the TCP listener inside PyMOL (default 9876) | 9876 |
| MCPYMOL_MMSEQS_URL | No | URL for a custom MMseqs2 API endpoint (default is ColabFold public API) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| contact_reportA | Lists the residues in contact across two selections, with distances and types. This is the numeric counterpart to ligand_view and interface_view: instead of drawing the interactions, it reports them — which residue pairs touch, how close they get, and whether the contact is a salt bridge, hydrogen bond, hydrophobic packing or pi-stacking. Use it to answer "what holds this ligand in the pocket" or "which residues form this interface". Classification uses heavy-atom distance criteria, since crystal structures usually have no hydrogens: salt bridge <= 4.0 A between formally charged sidechain tips, hydrogen bond <= 3.5 A between N/O pairs, hydrophobic <= 4.5 A between C/S pairs, pi-stacking <= 5.5 A between aromatic ring centroids (classified parallel or T-shaped by interplanar angle). A reported hydrogen bond is therefore a donor-acceptor pair with plausible geometry, not one verified against a hydrogen position. |
| interface_reportA | Measures how large a protein-protein interface is, and which residues form it. Reports buried surface area — the standard measure of how much of a complex is actually complex — by comparing each chain's solvent-accessible area free and bound. Also ranks the residues by how much surface each buries, and breaks the interface down by residue chemistry. Interpretation: a per-side area under ~400 A^2 is usually a crystal packing contact rather than a biological interface, while over ~1000 A^2 indicates a substantial, likely specific association. These are guides from PDB-wide surveys, not a verdict — small biological interfaces exist. For the interactions themselves — which pairs hydrogen bond, which form
salt bridges — use |
| superposition_viewA | Superposes two structures and colors the mobile one by per-residue shift. An RMSD alone tells you that something moved, not where. This superposes
Best on two states of the same protein — apo vs holo, open vs closed, a mutant against wild type. Residues are paired by chain and residue number, falling back to residue number alone when the two use different chain IDs. Both structures have to be loaded first, and |
| conservation_viewA | Colors the structure by evolutionary conservation using Shannon entropy. Runs a full pipeline: extracts the protein sequence from the loaded structure, submits it to an MMseqs2 server (ColabFold public API by default) for multiple sequence alignment, computes per-residue Shannon entropy, and maps the conservation scores onto the structure via the B-factor column and spectrum coloring. Entropy scores are cached in memory by sequence, so changing the scale or re-running on the same protein does not require a repeat API call. Magenta/blue = highly conserved (low entropy), white = moderate, cyan/green = highly variable (high entropy). NOTE: The first call makes an external API call and may take 30 seconds to several minutes depending on the server and sequence length. Subsequent calls for the same sequence are instant. |
| showC | Shows a graphical representation for a given selection. |
| hideB | Hides a graphical representation for a given selection. |
| colorC | Sets the color for a selection. |
| selectA | Creates (or replaces) a named selection for later reuse. |
| removeA | Permanently removes the atoms matching the selection. This deletes atoms; it does not just
hide them. To hide instead, use :func: |
| distanceA | Measures the distance between two selections and returns it in Angstrom. Also draws the measurement in the viewport as a named distance object. With multi-atom selections PyMOL reports the average over the pairs it found within its default cutoff. |
| sasaA | Measures solvent-accessible surface area, in square Angstrom. Reports the SASA of Accuracy depends on PyMOL's |
| rms_curA | Measures RMSD between two selections without moving anything. Use this when the structures are already superposed, or when you want to
know how far apart they are as currently positioned. Compare with Requires the two selections to have matching atom counts. |
| count_atomsA | Counts the atoms matching a selection. Handy for checking a selection expression does what you think before building a scene on top of it — an empty count means the expression is wrong, which is otherwise invisible until the picture comes out blank. |
| execute_pymol_commandA | Executes a raw PyMOL command string (PyMOL CLI syntax). PREFER the dedicated tools when one
exists — show, color, select, distance, ligand_view, interface_view, etc. They have better
defaults, do compound setup in one call, and produce cleaner results. Reach for this tool
only when no other tool covers what you need (e.g. Returns once the command has finished, with what PyMOL printed ( |
| asA | Shows one representation while hiding all others for the specified selection |
| setA | Sets a PyMOL setting to a specified value. Settings live at a level — global, object, object-state, atom or bond — and PyMOL ignores a
value stored below its setting's level. |
| cartoonC | Sets the cartoon type for the specified selection |
| spectrumC | Colors selection in a spectrum |
| labelC | Adds labels to atoms in the selection |
| angleB | Measures the angle between three selections and returns it in degrees. Also draws the measurement as a named angle object. |
| dihedralA | Measures the dihedral (torsion) angle between four selections, in degrees. Also draws the measurement as a named dihedral object. Useful for backbone phi/psi angles and ligand torsions. |
| centerB | Centers the view on a selection |
| orientC | Orients the view to align with principal axes of the selection |
| zoomC | Zooms the view on a selection |
| resetC | Resets the view, optionally resetting an object's matrix |
| turnB | Rotates the camera around an axis |
| moveB | Moves the camera along an axis |
| clipC | Adjusts the clipping planes |
| saveC | Saves data to a file |
| pngC | Saves a PNG image |
| deselectA | Clears the current selection |
| createC | Creates a new object from a selection |
| extractC | Extracts a selection to a new object |
| deleteC | Deletes objects or selections |
| alignC | Aligns one selection to another |
| superC | Superimposes one selection onto another |
| intra_fitB | Fits all states within an object |
| intra_rmsB | Calculates RMSD between states within an object |
| alterC | Alters atomic properties in a selection |
| alter_stateC | Alters atomic coordinates in a state |
| h_addC | Adds hydrogens to a selection |
| h_fillA | Fills open valences on the currently picked atom with hydrogens. Takes no selection: cmd.h_fill operates on PyMOL's editor pick, so it needs
an atom picked in the GUI and cannot be aimed from here. Passing it a
selection used to land the string in its |
| bondC | Creates a bond between two atoms |
| unbondB | Removes a bond between two atoms |
| rebuildC | Regenerates all displayed geometry |
| refreshC | Refreshes the display |
| util_cbcC | Colors by chain (Color By Chain) |
| util_cbawC | Colors by atom, white carbons (Color By Atom, White) |
| util_cbagC | Colors by atom, green carbons (Color By Atom, Green) |
| util_cbacC | Colors by atom, cyan carbons (Color By Atom, Cyan) |
| util_cbamC | Colors by atom, magenta carbons (Color By Atom, Magenta) |
| util_cbayB | Colors by atom, yellow carbons (Color By Atom, Yellow) |
| util_cbasC | Colors by atom, salmon carbons (Color By Atom, Salmon) |
| util_cbabC | Colors by atom, slate carbons (Color By Atom, slateBLue) |
| util_cbaoB | Colors by atom, orange carbons (Color By Atom, Orange) |
| util_cbapB | Colors by atom, purple carbons (Color By Atom, Purple) |
| util_cbakC | Colors by atom, pink carbons (Color By Atom, pinK) |
| util_chainbowC | Colors chains in rainbow gradient (CHAINs in rainBOW) |
| util_rainbowC | Colors residues in rainbow from N to C terminus |
| util_ssC | Colors by secondary structure |
| util_color_by_elementC | Colors atoms by their element |
| util_color_secondaryC | Colors secondary structure elements |
| spheroidC | Displays atoms as smooth spheres |
| isomeshC | Creates a mesh isosurface |
| isosurfaceC | Creates a solid isosurface |
| sculpt_activateC | Activates sculpting mode for an object |
| sculpt_deactivateB | Deactivates sculpting mode for an object |
| sculpt_iterateC | Performs sculpting iterations |
| sceneC | Manages scenes for later recall |
| scene_orderC | Sets the order of scenes |
| msetC | Defines a sequence of states for movie playback |
| mplayB | Starts playing the movie |
| mstopB | Stops the movie |
| frameC | Sets or queries the current frame |
| forwardB | Advances one frame |
| backwardB | Goes back one frame |
| rockC | Toggles a rocking animation |
| rayC | Performs ray-tracing |
| drawB | Uses OpenGL renderer (faster but lower quality) |
| mpngB | Saves a series of PNG images for movie frames |
| symexpC | Generates symmetry-related copies |
| set_symmetryC | Sets symmetry parameters for an object |
| fabC | Creates a peptide chain from a sequence |
| fragmentC | Loads a molecular fragment |
| full_screenB | Toggles fullscreen mode |
| viewportC | Sets the viewport size |
| cdB | Changes the current directory |
| pwdA | Prints the current directory |
| lsC | Lists files in the current directory |
| systemC | Executes a system command |
| helpC | Shows help for a command |
| print_ribbon_viewA | Chunky β-arrow ribbons plus a continuous backbone "spine", tuned for rigid, gap-free 3D printing. Configures the look developed for FDM printing: thick β-strand arrows
and a fat helix on the main object with loop cartoon hidden, plus a
separate The style is set on the object and its spine only; other objects and PyMOL's global settings are left alone. The spine is carried through residues with no CA atom, such as GFP's chromophore, without renaming anything. PyMOL draws a strand √2 times the strand_width and strand_thickness
settings, so the defaults (2.8, 2.0) give strands about 4.0 x 2.8 Å, and
a β-barrel's wall closes up. To see into a barrel, use
After calling this, export the fused solid with:: |
| print_exportA | Exports a structure as watertight STL files ready for multi-colour 3D printing. Each colour group becomes one STL file. PyMOL's exporters write the whole visible scene, so each group is isolated on its own before export, then rebuilt into a watertight solid. Every STL is written in PyMOL model coordinates (Å, the numbers get_coords reports) whatever the camera view, so groups from one call, or from separate calls, line up; the camera is left as it was. A slicer can load them as aligned multi-material parts (e.g. add the second STL as a "part" of the first in Bambu Studio). representation="displayed" prints what PyMOL shows, sticks and spheres included; "cartoon" keeps to cartoon and surface triangles and names what it left out. A group keeps every separate piece (two chains that do not touch print as two pieces) unless bodies="largest". The voxel method's growth of about 0.62 voxel per surface is undone unless undo_voxel_growth=False, but gaps narrower than about 2.5 voxels fuse while voxelising and cannot be reopened: a clearance needs voxel_pitch <= gap / 2.5. STL has no units and slicers read it as millimetres, so Requires the optional |
| renderA | Renders the current scene and returns the image, so you can see it. Use this instead of calling Every render is ray-traced, which takes seconds to minutes on a large
assembly. |
| turntableA | Renders a full 360° rotation as a numbered PNG sequence. Spins the camera around the vertical axis in equal steps and writes one
frame per step, ready to assemble into a GIF or MP4 (e.g.
Every frame is ray-traced, which is slow — 36 frames of a large assembly can take an hour, so start with few frames and a small width/height. The unshaded OpenGL renderer would be far faster but does not work over this bridge (it needs PyMOL's GUI thread), and silently produced blank frames until this was found. |
| fetch_structureA | Fetches a protein structure from the PDB, or a predicted model from AlphaFold DB. By default, it attempts to fetch the first biological assembly (multimer), and removes any unrelated chains/states that are not part of the primary multimer. A UniProt accession or an |
| load_structureA | Loads a structure from a local file path and applies the BFS multimer heuristic. |
| fetch_alphafoldA | Fetches a predicted structure from AlphaFold DB by UniProt accession. These are predictions, not experimental structures, so the model is coloured by pLDDT confidence rather than the usual style — dark blue is reliable, orange is essentially unmodelled. Read the orange and yellow regions as "probably disordered or wrong", not as flexible loops. Note that pLDDT rides in the B-factor column, so |
| structure_infoA | Summarises what a loaded structure actually is, in one call. Answers the question you ask before any analysis: what protein is this, how was it determined, at what resolution, what is in the file. Combines what PyMOL knows (chains, residue and atom counts, ligands, symmetry) with entry metadata from the RCSB (title, method, resolution, release date, source organism). Metadata lookup is best-effort — it is skipped silently if the object is not named after a PDB entry, or the API is unreachable. |
| get_sequenceA | Returns the amino-acid sequence of a loaded structure, in FASTA. Also reports how the sequence positions line up with the residue numbers in the file, and where the chain is broken. Both matter: PDB numbering rarely starts at 1, so "residue 50" in a paper and position 50 in the sequence are usually different residues — and unmodelled loops leave gaps in the structure that the sequence alone does not reveal. |
| atom_propertiesA | Reads per-atom properties, which nothing else in the tool set can reach. Object-level facts come back through Use it to check what you are actually looking at: partial occupancy where a sidechain has two conformations, per-atom pLDDT inside a predicted model, or which atoms carry a formal charge before reasoning about electrostatics.
|
| save_sessionA | Saves the entire PyMOL session to a .pse file. A session captures everything — every object, selection, representation, colour, scene and the camera — so the work can be reopened exactly as it was. Use this before experimenting with a scene you would not want to rebuild, and to hand a finished figure to a colleague. Unlike |
| load_sessionA | Restores a PyMOL session from a .pse file. By default this replaces everything currently loaded, exactly as opening
the file in PyMOL would. Set |
| list_objectsA | Lists all loaded PyMOL objects. Call this when you don't know what's currently in the session — for
example before composing a selection or running a view tool that needs
an |
| list_chainsA | Lists the chain IDs present in an object (or in all objects). Useful before calling :func: |
| list_ligandsA | Lists the small-molecule (organic) ligand residue names in an object. Call this before :func: |
| ligand_viewA | Shows a binding-site view focused on a ligand. Protein rendered as a semi-transparent cartoon. Pocket residues (within 5Å of the ligand) shown as sticks with element coloring and lightblue carbons. Ligand shown as thick sticks with yellow carbons. H-bonds drawn as yellow dashes. Pocket residues labeled. View zooms to the ligand. |
| bfactor_viewA | Colors the structure by crystallographic B-factor (temperature factor). Blue = rigid/ordered (low B), white = intermediate, red = flexible/disordered (high B). Useful for identifying dynamic loops, disordered termini, and rigid structural cores. Shown as cartoon on black background. |
| plddt_viewA | Colors an AlphaFold model by pLDDT confidence, using the official palette. Dark blue = very high (>90), light blue = confident (70-90), yellow = low (50-70), orange = very low (<50). Regions below 70 are usually intrinsically disordered or simply unreliable — read them as "the model does not know", not as a flexible loop. AlphaFold stores pLDDT in the B-factor column, which is why |
| interface_viewA | Highlights the protein-protein binding interface between two chains. Chain A shown in marine blue, chain B in salmon. Interface residues (within 4Å of the partner chain) shown as a solid surface patch with sticks. H-bonds across the interface drawn as yellow dashes. |
| putty_viewA | Visualizes protein flexibility using a putty (tube-width) representation. The cartoon tube radius scales linearly with crystallographic B-factor: thin/blue = rigid/ordered regions, thick/red = flexible/disordered regions. A 70%-transparent surface is shown, also colored by B-factor. Organic ligands are shown as sticks with yellow carbons. Black background. |
| hydrophobic_surface_viewB | Colors the molecular surface by amino acid hydrophobicity. Orange = hydrophobic (ILE, VAL, LEU, PHE, MET, ALA, TRP, PRO), white = polar (SER, THR, CYS, TYR, ASN, GLN, GLY), sky blue = positively charged (ARG, LYS, HIS), salmon = negatively charged (ASP, GLU). A white cartoon is shown beneath a semi-transparent surface. Organic ligands shown as sticks with yellow carbons. |
| electrostatic_viewA | Colors the molecular surface by approximate residue-based electrostatics. Surface is colored red→white→blue via a B-factor spectrum. A white cartoon is shown beneath a semi-transparent surface. Organic ligands shown as sticks with yellow carbons. For a more accurate Poisson-Boltzmann electrostatic surface, use poisson_boltzmann_view (requires APBS and PDB2PQR to be installed). |
| poisson_boltzmann_viewA | Colors the molecular surface by true Poisson-Boltzmann electrostatic potential. Runs PDB2PQR (AMBER force field, pH 7.0) then APBS to compute the full electrostatic potential map. Surface is colored red→white→blue over the range ±20 kT/e. A white cartoon is shown beneath a semi-transparent surface. Organic ligands shown as sticks with yellow carbons. Requires APBS and PDB2PQR to be installed on the system: brew install brewsci/bio/apbs pip install pdb2pqr |
| crosslink_viewB | Highlights structural cross-links: disulfide bonds, metals, and their coordination. Protein backbone shown as a thin grey cartoon. Cysteine side chains (CA→CB→SG) shown as yellow sticks, labeled by residue. Disulfide bonds drawn as yellow dashes. Metal ions shown as orange spheres. Metal coordination bonds drawn as dashed lines to nearby protein atoms. Black background. |
| pocket_viewA | Visualizes the binding pocket cavity around a ligand as a colored surface. The pocket (all residues within 5 Å of the ligand) is shown as a semi-transparent surface colored by chemical character: orange=hydrophobic, white=polar, skyblue=positive, salmon=negative. Pocket residue sidechains are shown as sticks. The ligand is shown as yellow sticks. H-bonds between the ligand and pocket are drawn as cyan dashes. The protein backbone is shown as a thin grey cartoon for context. |
| pharmacophore_viewA | Colors a ligand by pharmacophore feature type. The ligand is shown as sticks color-coded by pharmacophore property: violet=ring/aromatic carbon, yellow=aliphatic carbon, skyblue=nitrogen (H-bond donor/acceptor), salmon=oxygen (H-bond acceptor), gold=sulfur, palegreen=halogen (F/Cl/Br/I). H-bonds to protein are shown as cyan dashes. Interacting residue sidechains are shown as element-colored sticks with CA labels. The pocket is shown as a semi-transparent grey surface for cavity context. The protein backbone is shown as a thin grey cartoon. |
| mutation_viewA | Highlights mutated residues on the protein structure. Given a comma-separated list of mutations in standard notation (e.g. "A123G,V45L,T200S"), the mutated residues are shown as magenta sticks and labeled. Nearby residues (within 4 Å) are shown as thin grey sticks for packing context. The protein backbone is shown as a grey cartoon. Organic ligands are shown as yellow sticks. Mutation format: <wildtype_aa><mutant_aa>, e.g. "A123G" (Ala→Gly at position 123). Chain can optionally be prefixed: "A:A123G". |
| textbook_viewA | Configures PyMOL for a crisp, cel-shaded illustrative look ("Textbook Illustration"). This view transforms the structure into a bold, 2D illustrative style with sharp black outlines, ideal for presentations or textbook-style diagrams. It hides the interior complexities, showing a solid white cartoon and surface with heavy black edge contours. Ligands are styled similarly as opaque white sticks with outlines. |
| cinematic_viewB | Configures PyMOL for a depth-cued, cinematic look with dramatic lighting. This view emphasizes volume and scale using deep shadows, fog, and depth-cueing. The core of the structure emerges from a dark background, making massive complexes (like ribosomes or viral capsids) look dramatic and imposing. Protein uses standard coloring but with altered material properties. |
| pointillist_viewA | Renders the structure as an artistic, abstract pointillist/starfield cloud. The continuous surface is replaced by thousands of individual dots representing the solvent-accessible surface, resembling a galaxy or pointillist painting. The protein backbone is hidden to emphasize the scattered volume. Ligands are shown as bright yellow spheres (stars) embedded in the cloud. |
| occupancy_viewA | Colour and scale a structure by per-atom crystallographic occupancy (q). Alternates at q<1 are visually de-emphasised in proportion, so a half-occupied conformer looks half-there instead of looking like a confident model. This is occupancy in the crystallographic sense — the fraction of unit cells in which an atom sits at this position. It is NOT the fraction of imaged particles containing a subunit; a model can be q=1.0 everywhere while the subunit is present in half the particles. Both are true and they are different questions, so this tool never reports the other sense. |
| altloc_viewA | Show every altloc group at once, one colour per group, occupancies labelled. A multiconformer model says "at this site, these discrete alternatives, in these proportions". PyMOL shows one of them by default, which quietly turns a statement about heterogeneity into a single structure. |
| ensemble_spread_viewA | Colour and thicken a multi-state object by how much its states disagree. Per-residue RMS deviation across states, pushed into the B-factor column and spectrum-coloured blue (rigid) to red (variable). Spread is a description of how much the deposited members differ. It is NOT a calibrated uncertainty and NOT an error bar: the number of members and the refinement protocol both shape it, so a wider tube means these models disagree more, not that the true position is less well determined. |
| morph_statesA | Interpolate between states, refusing when interpolation is ill-posed. The value here is the refusal, not the interpolation — PyMOL morphs natively. A morph is only meaningful when every state shares a topology, so that atom i in state 1 is the same atom as atom i in state 2. That holds for a deformation-model ensemble (3DFlex, DynaMight). It does not hold for volumes reconstructed and modelled independently, and a morph across those animates a correspondence nobody established. Note that cmd.morph is Incentive-only. On open-source PyMOL the topology check still runs and reports; only the interpolation is unavailable. |
| qscore_viewA | Colour a model by per-residue Q-score parsed from its wwPDB validation report. No network, no map, and no computation — Q-scores are already published, and this reads the numbers rather than re-deriving them. Two things to expect from real data: entries deposited before the September 2023 validation rollout carry no Q-scores at all, which is the common case for older EM structures; and real Q-scores go negative, so the published 0–1 framing is the intended range and not the observed one. |
| restore_bfactorsA | Restore the B-factors a Wiggles view overwrote. occupancy_view, ensemble_spread_view and qscore_view all push their values into the B-factor column so PyMOL can spectrum-colour by them. The originals are stashed first; this puts them back in one pass. |
| map_infoA | Report an MRC/CCP4 map's geometry, above all its voxel size. Reads only the 1024-byte header — the map data is never loaded, PyMOL is never touched, and nothing goes over the network. Voxel size is not stored in the header, it is derived, and the derivation has a trap: it is cella/m (the grid sampling), not cella/n (the stored extent). Those differ on any boxed or cropped map, and dividing by n gives a wrong answer of the right order of magnitude. The nominal value is only expected to be accurate to ±5–15% in the first place, which at 1.2 Å is a systematic stretch of every distance in the model. Anisotropy, cropping and axis permutation are all flagged loudly. |
| load_mapA | Load a volume into PyMOL, recording where it came from and reporting its geometry. The header is parsed before PyMOL is touched, so a malformed file fails without leaving a half-loaded object in the session, and the load is confirmed rather than assumed. Provenance defaults to unknown and is never guessed. A measured reconstruction, a sharpened map, a network-enhanced map and a decoder output all render identically once they are an isosurface, so defaulting to "measured" would quietly assert that somebody observed a generated volume. The report shows what the file says about itself — MRC labels, filename tokens — so the caller can declare it. |
| density_viewA | Draw an isomesh around a selection, stating the contour level in both units. PyMOL normalises MRC/CCP4 maps on load, so an isomesh level is in sigma. EMDB's author-recommended contour is an absolute map value. They are not interchangeable and the difference is not subtle: EMD-30913 publishes 0.05, which is 3.16 sigma — used directly as a sigma level it contours noise. So the level is reported in sigma AND absolute units every time, an absolute level is converted before it reaches PyMOL, and EMDB depositions get a pointer to their published contour with the units named. Requires the map to have been loaded through load_map, because the conversion needs the header's mean and RMS. |
| local_resolution_viewA | Colour a map's isosurface by a local-resolution volume instead of by chain. A single global resolution number misrepresents almost every map: a rigid core at 2.5 Å and a flexible periphery at 5 Å live in the same volume, and one isosurface invites the reader to believe all of it is equally real. Two things make this harder than it looks, and both are handled. The volumes must share a voxel grid — colouring one map by another samples it at the first map's coordinates, so a mismatch in extent, spacing, origin or axis order draws colour from the wrong place and renders smooth, plausible and wrong. This tool refuses and names what differs. And PyMOL normalises maps on load, so ramp breakpoints given in Ångström must be converted to sigma against the RESOLUTION map's own header — a different sigma scale from the contour level, which comes from the density map's. Every breakpoint is reported in both units. Local resolution is an estimate. Estimators disagree with each other on the same map, and the value at a voxel depends on the window and the mask as much as on the data. |
| load_ensembleA | Load a cryo-EM heterogeneity job's volumes in trajectory order. Every method in this space writes the same thing: a directory of maps plus a table of latent coordinates. This reads them in trajectory order — naturally, so frame 10 does not sort between 1 and 2 and silently reorder the motion. The generating method is identified from documented on-disk markers and is never guessed. A directory that matches nothing loads its volumes fine and stays unidentified, which makes latent views refuse to render: an unlabelled latent plot is what SPEC invariant I2 forbids, because each method's caveat is different and they are not interchangeable. Pass method= if you know. Provenance defaults to "generated" rather than "unknown" — nothing observed a decoder's output — and the report says it declared that and on what evidence. |
| latent_traverse_viewA | Step through an ensemble's conformations as a contoured trajectory. Refuses when the generating method was never identified. That is SPEC invariant I2 working, not a failure: cryoDRGN's latent density can bear no relation to the truth while 3DVA's frames are linear interpolations no particle occupied, and rendering both the same way asserts something for one that holds only for the other. The contour is held at a constant ABSOLUTE value and converted to each frame's own sigma. PyMOL normalises every map independently on load, so a fixed sigma level would contour each frame at its own scale and flatten away the density change the traversal exists to show. No latent scatter and no density estimate are drawn, deliberately. In a 41-submission blind challenge most methods missed a genuinely present middle state, so an empty region of latent space is a region of unknown occupancy — never evidence that a conformation does not occur. |
| deformation_viewA | Colour and arrow a model by how far each residue moved between two states. This is the well-supported tool in the tier. A 41-submission blind challenge found the molecular motions these methods recover resemble both each other and the ground truth; it was relative populations that fell apart. So the arrows mean: density moved this way. They do not mean: this fraction of particles moved this way, and no population can be read out of them. Refuses when the two states differ in atom count — atoms cannot be paired across them, so a displacement field would be meaningless rather than approximate. Where a method estimates deformation on independent half-sets, pass that table and the arrows are coloured by the disagreement. Without it every arrow is drawn with identical confidence and they do not have identical confidence, which the report says rather than leaving the picture to imply otherwise. |
| composition_viewA | Colour parts of a structure by the fraction of particles containing them. This is occupancy in SENSE 2 — compositional. A ligand at 40% here means 40% of imaged complexes had it bound. It is not the per-atom crystallographic occupancy q, and it is never derived from q: a model can be q=1.0 at every atom while the subunit it belongs to is present in half the particles. Both statements are true and they answer different questions, so the table must be supplied and this tool never reads an atom property at all. For sense 1, use occupancy_view. A selection matching no atoms is refused rather than skipped — PyMOL would accept it silently, colour nothing, and leave a render that looks like a fully-present structure. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 135 tools
There are several near-duplicate clusters: ten `util_cb*` tools all do "color by atom with a different carbon color," and `util_rainbow`/`util_chainbow`/`util_ss`/`util_color_by_element`/`util_color_secondary`/`spectrum`/`color` all recolor structures. Rendering/export tools (`ray`, `render`, `draw`, `png`, `mpng`, `turntable`, `print_export`, `print_ribbon_view`) and representation tools (`show`, `as`, `spheroid`, `isomesh`, `isosurface`, `cartoon`) overlap enough that an agent must read long descriptions to choose. Individual descriptions are excellent and often explicitly cross-reference siblings, which rescues some but not all of the boundaries.
At least four conventions coexist: bare PyMOL command names (`as`, `set`, `show`, `hide`, `color`, `turn`, `scene`, `frame`, `clip`), an `util_` prefix group with ad-hoc suffixes (`util_cbam`, `util_cbak`, `util_cbc`, `util_chainbow`), a `_view` suffix group (`ligand_view`, `putty_view`, `qscore_view`), and a `*_report`/`*_info` group. Several names are single vague words (`as`, `set`, `do`-like `draw`, `fab`, `mset`, `mpng`) that give no hint of scope.
135 tools is an order of magnitude beyond what an agent can hold in context for a single server, and many are trivially redundant (ten carbon-color variants, three isosurface/mesh tools, four render paths). The surface should be compressed into parameterized tools (e.g. one `color_by_atom(carbon=...)`, one `render(kind=...)`).
The domain (scripting PyMOL) is covered practically end to end: loading/session, selections, representations, measurements, analysis reports, views/presets, movies, scenes, ray-tracing, and 3D-print export. `execute_pymol_command` provides an explicit escape hatch for whatever the curated set misses. Minor gaps (e.g. no dedicated undo/history, some settings only reachable via `set`/`execute_pymol_command`) are workable.